From 34348bc10eb9dbb9a0363d9607a824f4779e4e79 Mon Sep 17 00:00:00 2001
From: zhangzepeng
Date: Tue, 5 Dec 2023 17:36:27 +0800
Subject: [PATCH 1/9] =?UTF-8?q?=E2=80=98fix=E6=B3=B3=E9=81=93=E6=94=B6?=
=?UTF-8?q?=E8=97=8F=E5=88=97=E8=A1=A8=EF=BC=8C=E6=94=B6=E8=97=8FG1?=
=?UTF-8?q?=E7=BB=84=E6=95=B0=E6=8D=AE=E5=90=8E=EF=BC=8C=E5=88=97=E8=A1=A8?=
=?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=AE=9A=E4=BD=8D=E5=88=B0=E4=BA=86G2?=
=?UTF-8?q?=E7=BB=84=E5=BA=95=E9=83=A8=E2=80=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: zhangzepeng
---
.../base-ui/chart/column/LitChartColumn.ts | 66 +-
.../chart/column/LitChartColumnConfig.ts | 14 +-
.../base-ui/chart/scatter/LitChartScatter.ts | 546 -----
.../chart/scatter/LitChartScatterConfig.ts | 45 -
ide/src/doc/md/quickstart_native_memory.md | 12 +-
...ickstart_Application_operation_skills.html | 6 +-
ide/src/doc/quickstart_animation.html | 2 +-
ide/src/doc/quickstart_app_startup.html | 2 +-
ide/src/doc/quickstart_arkts.html | 4 +-
ide/src/doc/quickstart_hilog.html | 2 +-
ide/src/doc/quickstart_hisystemevent.html | 2 +-
ide/src/doc/quickstart_memory_template.html | 56 +-
ide/src/doc/quickstart_native_memory.html | 20 +-
ide/src/doc/quickstart_parsing_ability.html | 8 +-
.../doc/quickstart_schedulinganalysis.html | 2 +-
ide/src/doc/quickstart_taskpool.html | 2 +-
ide/src/figures/Allmemory/snativeheaptab.jpg | Bin 24350 -> 0 bytes
ide/src/figures/Allmemory/ssampletab.jpg | Bin 62784 -> 122502 bytes
ide/src/figures/Allmemory/sstaaticstab.jpg | Bin 52792 -> 99163 bytes
ide/src/figures/Hilog/hilogconfig.jpg | Bin 32692 -> 41510 bytes
ide/src/trace/SpApplication.ts | 3 +-
ide/src/trace/bean/BinderProcessThread.ts | 60 -
ide/src/trace/bean/SchedSwitchStruet.ts | 51 -
ide/src/trace/bean/ThreadStruct.ts | 1 -
ide/src/trace/component/SpHelp.ts | 15 +
ide/src/trace/component/SpKeyboard.ts | 6 -
ide/src/trace/component/SpQuerySQL.ts | 7 +-
ide/src/trace/component/SpSystemTrace.ts | 160 +-
.../trace/component/chart/SpAllAppStartups.ts | 141 --
.../trace/component/chart/SpChartManager.ts | 8 -
.../trace/component/chart/SpProcessChart.ts | 193 +-
.../component/chart/SpSegmentationChart.ts | 443 ----
.../trace/component/setting/SpHilogRecord.ts | 1 +
ide/src/trace/component/trace/SpChartList.ts | 3 +-
.../trace/component/trace/base/TraceRow.ts | 76 +-
.../trace/component/trace/base/TraceSheet.ts | 21 +-
.../component/trace/base/TraceSheetConfig.ts | 29 -
ide/src/trace/component/trace/base/Utils.ts | 20 +-
.../component/trace/sheet/TabPaneCurrent.ts | 9 +-
.../trace/sheet/TabPaneCurrentSelection.ts | 58 +-
.../sheet/binder/TabPaneBinderDataCut.ts | 781 -------
.../sheet/binder/TabPaneThreadBinders.ts | 180 --
.../sheet/frequsage/TabPaneFreqDataCut.ts | 1795 +++++++++--------
.../trace/sheet/frequsage/TabPaneFreqUsage.ts | 628 +++---
.../sheet/frequsage/TabPaneFreqUsageConfig.ts | 76 -
.../sheet/gpufreq/tabPaneGpufreqDataCut.ts | 456 -----
.../sheet/gpufreq/tabPaneGpufreqUsage.ts | 221 --
.../sheet/schedswitch/TabPaneSchedSwitch.ts | 736 -------
.../trace/timer-shaft/TabPaneFlag.ts | 5 +-
ide/src/trace/database/SqlLite.ts | 466 +----
.../database/ui-worker/ProcedureWorker.ts | 6 -
.../ui-worker/ProcedureWorkerAllAppStartup.ts | 109 -
.../ui-worker/ProcedureWorkerCommon.ts | 256 +--
.../ui-worker/ProcedureWorkerFreqExtend.ts | 109 -
.../ui-worker/ProcedureWorkerThread.ts | 3 +-
.../ui-worker/procedureWorkerBinder.ts | 110 -
.../prebuilts/patch_hiperf/hiviewdfx_BUILD.gn | 2 +-
57 files changed, 1643 insertions(+), 6390 deletions(-)
delete mode 100644 ide/src/base-ui/chart/scatter/LitChartScatter.ts
delete mode 100644 ide/src/base-ui/chart/scatter/LitChartScatterConfig.ts
delete mode 100644 ide/src/figures/Allmemory/snativeheaptab.jpg
delete mode 100644 ide/src/trace/bean/BinderProcessThread.ts
delete mode 100644 ide/src/trace/bean/SchedSwitchStruet.ts
delete mode 100644 ide/src/trace/component/chart/SpAllAppStartups.ts
delete mode 100644 ide/src/trace/component/chart/SpSegmentationChart.ts
delete mode 100644 ide/src/trace/component/trace/sheet/binder/TabPaneBinderDataCut.ts
delete mode 100644 ide/src/trace/component/trace/sheet/binder/TabPaneThreadBinders.ts
delete mode 100644 ide/src/trace/component/trace/sheet/frequsage/TabPaneFreqUsageConfig.ts
delete mode 100644 ide/src/trace/component/trace/sheet/gpufreq/tabPaneGpufreqDataCut.ts
delete mode 100644 ide/src/trace/component/trace/sheet/gpufreq/tabPaneGpufreqUsage.ts
delete mode 100644 ide/src/trace/component/trace/sheet/schedswitch/TabPaneSchedSwitch.ts
delete mode 100644 ide/src/trace/database/ui-worker/ProcedureWorkerAllAppStartup.ts
delete mode 100644 ide/src/trace/database/ui-worker/ProcedureWorkerFreqExtend.ts
delete mode 100644 ide/src/trace/database/ui-worker/procedureWorkerBinder.ts
diff --git a/ide/src/base-ui/chart/column/LitChartColumn.ts b/ide/src/base-ui/chart/column/LitChartColumn.ts
index 19ddfa533..818412eba 100644
--- a/ide/src/base-ui/chart/column/LitChartColumn.ts
+++ b/ide/src/base-ui/chart/column/LitChartColumn.ts
@@ -207,42 +207,40 @@ export class LitChartColumn extends BaseElement {
for (let i = 0; i <= 5; i++) {
this.rowLines.push({
y: gap * i,
- label: this.litChartColumnCfg.removeUnit === true ? `${maxValue - valGap * i}` : `${getProbablyTime(maxValue - valGap * i)}`,
+ label: `${getProbablyTime(maxValue - valGap * i)}`,
});
}
- if (!this.litChartColumnCfg.notSort) {
- this.litChartColumnCfg?.data
- .sort((a, b) => b[this.litChartColumnCfg!.yField] - a[this.litChartColumnCfg!.yField]);
- }
- this.litChartColumnCfg?.data.forEach((litChartColumnItem, litChartColumnIndex, array) => {
- this.data.push({
- color: this.litChartColumnCfg!.color(litChartColumnItem),
- obj: litChartColumnItem,
- root: true,
- xLabel: litChartColumnItem[this.litChartColumnCfg!.xField],
- yLabel: litChartColumnItem[this.litChartColumnCfg!.yField],
- bgFrame: {
- x: this.offset!.x! + partWidth * litChartColumnIndex,
- y: 0,
- w: partWidth,
- h: partHeight,
- },
- centerX: this.offset!.x! + partWidth * litChartColumnIndex + partWidth / 2,
- centerY:
- partHeight -
- (litChartColumnItem[this.litChartColumnCfg!.yField] * partHeight) / maxValue +
- (litChartColumnItem[this.litChartColumnCfg!.yField] * partHeight) / maxValue / 2,
- frame: {
- x: this.offset!.x! + partWidth * litChartColumnIndex + partWidth / 6,
- y: partHeight - (litChartColumnItem[this.litChartColumnCfg!.yField] * partHeight) / maxValue,
- w: partWidth - partWidth / 3,
- h: (litChartColumnItem[this.litChartColumnCfg!.yField] * partHeight) / maxValue,
- },
- height: 0,
- heightStep: Math.ceil((litChartColumnItem[this.litChartColumnCfg!.yField] * partHeight) / maxValue / 60),
- process: true,
+ this.litChartColumnCfg?.data
+ .sort((a, b) => b[this.litChartColumnCfg!.yField] - a[this.litChartColumnCfg!.yField])
+ .forEach((litChartColumnItem, litChartColumnIndex, array) => {
+ this.data.push({
+ color: this.litChartColumnCfg!.color(litChartColumnItem),
+ obj: litChartColumnItem,
+ root: true,
+ xLabel: litChartColumnItem[this.litChartColumnCfg!.xField],
+ yLabel: litChartColumnItem[this.litChartColumnCfg!.yField],
+ bgFrame: {
+ x: this.offset!.x! + partWidth * litChartColumnIndex,
+ y: 0,
+ w: partWidth,
+ h: partHeight,
+ },
+ centerX: this.offset!.x! + partWidth * litChartColumnIndex + partWidth / 2,
+ centerY:
+ partHeight -
+ (litChartColumnItem[this.litChartColumnCfg!.yField] * partHeight) / maxValue +
+ (litChartColumnItem[this.litChartColumnCfg!.yField] * partHeight) / maxValue / 2,
+ frame: {
+ x: this.offset!.x! + partWidth * litChartColumnIndex + partWidth / 6,
+ y: partHeight - (litChartColumnItem[this.litChartColumnCfg!.yField] * partHeight) / maxValue,
+ w: partWidth - partWidth / 3,
+ h: (litChartColumnItem[this.litChartColumnCfg!.yField] * partHeight) / maxValue,
+ },
+ height: 0,
+ heightStep: Math.ceil((litChartColumnItem[this.litChartColumnCfg!.yField] * partHeight) / maxValue / 60),
+ process: true,
+ });
});
- });
} else {
let reduceGroup = this.litChartColumnCfg.data.reduce((pre, current, index, arr) => {
(pre[current[this.litChartColumnCfg!.xField]] = pre[current[this.litChartColumnCfg!.xField]] || []).push(
@@ -261,7 +259,7 @@ export class LitChartColumn extends BaseElement {
for (let index = 0; index <= 5; index++) {
this.rowLines.push({
y: gap * index,
- label: `${getProbablyTime(maxValue - valGap * index)}`,
+ label: `${getProbablyTime(maxValue - valGap * index)} `,
});
}
Reflect.ownKeys(reduceGroup)
diff --git a/ide/src/base-ui/chart/column/LitChartColumnConfig.ts b/ide/src/base-ui/chart/column/LitChartColumnConfig.ts
index 0b3283a39..b508e8278 100644
--- a/ide/src/base-ui/chart/column/LitChartColumnConfig.ts
+++ b/ide/src/base-ui/chart/column/LitChartColumnConfig.ts
@@ -19,16 +19,14 @@ export interface LitChartColumnConfig {
xField: string;
yField: string;
seriesField: string;
- notSort?: boolean;
- removeUnit?: boolean;
color: (a: any) => string;
tip: ((a: any) => string) | undefined;
hoverHandler?: (no: number) => void;
label:
- | {
- offset: number;
- content: (it: any) => string;
- }
- | undefined
- | null;
+ | {
+ offset: number;
+ content: (it: any) => string;
+ }
+ | undefined
+ | null;
}
diff --git a/ide/src/base-ui/chart/scatter/LitChartScatter.ts b/ide/src/base-ui/chart/scatter/LitChartScatter.ts
deleted file mode 100644
index 26d9f3653..000000000
--- a/ide/src/base-ui/chart/scatter/LitChartScatter.ts
+++ /dev/null
@@ -1,546 +0,0 @@
-/*
- * Copyright (C) 2023 Huawei Device Co., Ltd.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { resizeCanvas } from '../helper.js';
-import { BaseElement, element } from '../../BaseElement.js';
-import { LitChartScatterConfig } from "./LitChartScatterConfig.js";
-
-@element('lit-chart-scatter')
-export class LitChartScatter extends BaseElement {
- private scatterTipEL: HTMLDivElement | null | undefined;
- private labelsEL: HTMLDivElement | null | undefined;
- canvas: HTMLCanvasElement | undefined | null;
- canvas2: HTMLCanvasElement | undefined | null;
- ctx: CanvasRenderingContext2D | undefined | null;
- originX: number = 0;
- finalX: number = 0;
- originY: number = 0;
- finalY: number = 0;
- options: LitChartScatterConfig | undefined;
-
- set config(LitChartScatterConfig: LitChartScatterConfig) {
- this.options = LitChartScatterConfig;
- this.init();
- }
- init(): void {
- if (this.options) {
- // 清楚上一次绘制的数据
- this.ctx?.clearRect(0, 0, this.clientWidth, this.clientHeight);
- this.drawBackground();
- this.drawScatterChart(this.options);
- //使用off-screen-canvas保存绘制的像素点
- this.setOffScreen();
- this.labelsEL!.innerText = this.options.title;
- }
- }
- // 使用离屏技术保存绘制的像素点
- setOffScreen(): void {
- this.canvas2 = document.createElement('canvas');
- this.canvas2.height = this.clientHeight;
- this.canvas2.width = this.clientWidth;
- let context2 = this.canvas2.getContext('2d');
- if (this.canvas?.width != 0 && this.canvas?.height != 0) {
- context2!.drawImage(this.canvas!, 0, 0);
- }
- }
- /*绘制渐变色背景*/
- drawBackground(): void {
- let w: number = this.clientWidth;
- let h: number = this.clientHeight;
- let color: CanvasGradient = this.ctx?.createRadialGradient(w / 2, h / 2, 0.2 * w, w / 2, h / 2, 0.5 * w)!;
- color?.addColorStop(0, '#eaeaea');
- color?.addColorStop(1, '#ccc');
- if (this.options) {
- this.options!.globalGradient = color;
- }
- this.ctx?.save();
- this.ctx!.fillStyle = color;
- this.ctx?.fillRect(0, 0, w, h);
- this.ctx?.restore();
- }
- /**
- * 绘制散点图
- */
- drawScatterChart(options: LitChartScatterConfig): void {
- this.drawAxis(options); //绘制坐标轴
- this.drawYLabels(options); //绘制y轴坐标
- this.drawXLabels(options); //绘制x轴坐标
- let drawload: boolean = false;
- if (options) {
- drawload = options.drawload;
- }
- if (drawload) {
- let load: Array = [];
- if (options) {
- load = options.load;
- this.drawBalanceLine(load);//绘制均衡线
- this.drawLoadLine(load);//绘制最大负载线
- }
- }
- this.drawData(options);//绘制散点图
- }
- /**
- * 绘制坐标轴
- */
- drawAxis(options: LitChartScatterConfig): void {
- let text: Array = new Array();
- if (options) {
- text = options.AxisLabel;
- }
- this.ctx!.font = "10px KATTI";
- this.ctx!.fillStyle = "#000000";
- this.ctx!.strokeStyle = "#000000";
- // 画x轴
- this.ctx?.beginPath();
- this.ctx?.moveTo(this.originX, this.originY);
- this.ctx?.lineTo(this.finalX, this.originY);
- this.ctx?.fillText(text[0], this.finalX, this.originY);
- this.ctx?.stroke();
- // 画Y轴
- this.ctx?.beginPath();
- this.ctx?.moveTo(this.originX, this.originY);
- this.ctx?.lineTo(this.originX, this.finalY);
- this.ctx?.fillText(text[1], this.originX - 20, this.finalY - 10);
- this.ctx?.stroke();
- }
- /**
- * 绘制y轴坐标
- */
- drawYLabels(options: LitChartScatterConfig): void {
- // 添加原点刻度
- this.ctx!.font = "12px KATTI";
- this.ctx!.fillStyle = "#000000";
- this.ctx!.strokeStyle = "#000000";
- this.ctx?.fillText("0", this.originX - 5, this.originY + 10);
- let yAxis: Array = [];
- if (options) {
- yAxis = options.yAxisLabel;
- }
- // 画Y轴坐标尺
- for (let i = 0; i < yAxis.length; i++) {
- let length1 = ((this.originY - this.finalY) - ((this.originY - this.finalY) % 100)) * (yAxis[i] / yAxis[yAxis.length - 1]);
- let length2 = this.originY - length1;
- this.ctx?.beginPath();
- this.ctx?.moveTo(this.originX, length2);
- this.ctx?.lineTo(this.originX + 5, length2);
- this.ctx?.fillText(yAxis[i].toString(), this.originX - 40, length2 + 5);
- this.ctx?.stroke();
- }
-
- }
- /**
- * 绘制x轴坐标
- */
- drawXLabels(options: LitChartScatterConfig): void {
- // 画X轴坐标尺
- this.ctx!.fillStyle = "#000000";
- this.ctx!.strokeStyle = "#000000";
- let xAxis: Array = [];
- if (options) {
- xAxis = options.xAxisLabel;
- }
- for (let i = 0; i < xAxis.length; i++) {
- let length3 = ((this.finalX - this.originX) - ((this.finalX - this.originX) % 100)) * (xAxis[i] / xAxis[xAxis.length - 1]);
- let length4 = this.originX + length3;
- this.ctx?.beginPath();
- this.ctx?.moveTo(length4, this.originY);
- this.ctx?.lineTo(length4, this.originY - 5);
- this.ctx?.fillText(xAxis[i].toString(), length4 - 5, this.originY + 10);
- this.ctx?.stroke();
- }
- }
-
- /**
- * 绘制数据
- */
- drawData(options: LitChartScatterConfig): void {
- let data: Array>> = [];
- let yAxis: Array = [];
- let xAxis: Array = [];
- let colorPool: Array = new Array();
- let colorPoolText: Array = new Array();
- let rectY: number = this.clientHeight * 0.05;
- if (options) {
- data = options.data;
- yAxis = options.yAxisLabel;
- xAxis = options.xAxisLabel;
- colorPool = options.colorPool();
- colorPoolText = options.colorPoolText();
- options.paintingData = []
- }
- let xLength = ((this.finalX - this.originX) - ((this.finalX - this.originX) % 100));
- let yLength = ((this.originY - this.finalY) - ((this.originY - this.finalY) % 100));
- for (let i = 0; i < data.length; i++) {
- for (let j = 0; j < data[i].length; j++) {
- // 打点x坐标
- let x = this.originX + (data[i][j][0] / xAxis[xAxis.length - 1]) * xLength;
- // 打点y坐标
- let y = this.originY - (data[i][j][1] / yAxis[yAxis.length - 1]) * yLength;
- let r = 6;
- if (i > 0) {
- options.paintingData[data[i][j][2] - 1] = {
- x, y, r, c: data[i][j], color: colorPool[i]
- };
- } else {
- options.paintingData.push({
- x, y, r, c: data[i][j], color: colorPool[i]
- });
- }
- this.drawCycle(x, y, r, 0.8, colorPool[i]);
- }
- if (data[i].length) {
- rectY = rectY + 20;
- this.ctx?.fillText(colorPoolText[i] + ": ", this.clientWidth - 70, rectY + 4);
- this.drawCycle(this.clientWidth - 20, rectY, 7.5, 0.8, colorPool[i]);
- }
- }
- }
- /**
- * 画圆点
- */
- drawCycle(x: number, y: number, r: number, transparency: number, color: string): void {
- this.ctx!.fillStyle = color;
- this.ctx?.beginPath();
- this.ctx!.globalAlpha = transparency;
- this.ctx?.arc(x, y, r, 0, Math.PI * 2, true);
- this.ctx?.closePath();
- this.ctx?.fill();
-
- }
-
- /**
- * 绘制最大负载线
- */
- drawLoadLine(data: Array): void {
- let maxXAxis: number = 1;
- if (this.options) {
- maxXAxis = this.options.xAxisLabel[this.options.xAxisLabel.length - 1];
- }
- // data[1]用来标注n Hz负载线
- let addr1: number = this.originX + ((this.finalX - this.originX) - ((this.finalX - this.originX) % 100)) * (data[0] / maxXAxis);
- let addr2: number = ((this.originY - this.finalY) - ((this.originY - this.finalY) % 100)) / 60;
- let y: number = this.originY;
- this.ctx!.strokeStyle = "#ff0000";
- for (let i = 0; i < 60; i++) {
- this.ctx?.beginPath();
- this.ctx?.moveTo(addr1, y);
- y -= addr2;
- this.ctx?.lineTo(addr1, y);
- if (i % 2 != 0) {
- this.ctx?.stroke();
-
- }
- }
- this.ctx!.font = "10px KATTI";
- this.ctx!.fillStyle = "#ff0000";
- this.ctx?.fillText(data[1] + 'Hz最大负载线', addr1 - 20, this.originY - addr2 * 60 - 15);
- this.ctx!.fillStyle = "#000000";
- this.ctx?.fillText('过供给区', addr1 / 2, y + 30);
- this.ctx?.fillText('欠供给区', addr1 / 2, this.originY - this.finalY);
- this.ctx?.fillText('超负载区', addr1 + 20, (this.finalY + this.originY) / 2);
- }
-
- /**
- * 绘制均衡线
- */
- drawBalanceLine(data: Array): void {
- let maxXAxis: number = 1;
- if (this.options) {
- maxXAxis = this.options.xAxisLabel[this.options.xAxisLabel.length - 1];
- }
- // data[1]用来标注n Hz均衡线
- let addr1: number = ((this.finalX - this.originX) - ((this.finalX - this.originX) % 100)) * (data[0] / maxXAxis) / 60;
- let addr2: number = ((this.originY - this.finalY) - ((this.originY - this.finalY) % 100)) / 60;
- let x: number = this.originX;
- let y: number = this.originY;
- this.ctx!.strokeStyle = "#00ff00";
- for (let i = 0; i < 60; i++) {
- this.ctx?.beginPath();
- this.ctx?.moveTo(x, y);
- x += addr1;
- y -= addr2;
- this.ctx?.lineTo(x, y);
- if (i % 2 == 0) {
- this.ctx?.stroke();
-
- }
- }
- this.ctx?.save();
- this.ctx?.translate(addr1 * 25 + this.originX, addr2 * 40 + this.finalY);
- this.ctx!.font = "10px KATTI";
- this.ctx!.fillStyle = "#ff0f00";
- this.ctx?.rotate(-Math.atan(addr2 / addr1));
- this.ctx?.fillText(data[1] + 'Hz均衡线', 0, 0);
- this.ctx?.restore();
- }
-
- /*检测是否hover在散点之上*/
- checkHover(options: LitChartScatterConfig | undefined, pos: Object): Object | boolean {
- let data: Array
-
+
- 网页链接文件打开接口可以在网址后增加文件地址,打开后直接打开trace。
+ 网页连接文件打开接口可以在网址后增加文件地址,打开后直接打开trace。
接口的url路径如下:
@@ -866,7 +866,7 @@
- 单个泳道图点击会将泳道图折叠为一行,折叠后的字体是蓝色。
+ 单个泳道图点击会将泳道图折叠为一行,折腾后的字体是蓝色。
diff --git a/ide/src/doc/quickstart_animation.html b/ide/src/doc/quickstart_animation.html
index 29ab5dfdf..93c949f5a 100644
--- a/ide/src/doc/quickstart_animation.html
+++ b/ide/src/doc/quickstart_animation.html
@@ -801,7 +801,7 @@
diff --git a/ide/src/doc/quickstart_app_startup.html b/ide/src/doc/quickstart_app_startup.html
index 36fbd7096..ce0107c86 100644
--- a/ide/src/doc/quickstart_app_startup.html
+++ b/ide/src/doc/quickstart_app_startup.html
@@ -803,7 +803,7 @@
diff --git a/ide/src/doc/quickstart_arkts.html b/ide/src/doc/quickstart_arkts.html
index f88fdfd48..9edcb0f5e 100644
--- a/ide/src/doc/quickstart_arkts.html
+++ b/ide/src/doc/quickstart_arkts.html
@@ -797,14 +797,14 @@
- 打开Start Ark Ts Record总开关下面的Start cpu profiler开关抓取Cpuprofiler数据。
+ 打开Start Ark Ts Record总开关下面的Start cpu profiler开关抓取cpuprofiler数据。
- 将抓取的Cpuprofiler文件导入到SmartPerf中,查看Ts层耗时长的函数和阶段。
+ 将抓取的cpuprofiler文件导入到smartperf中,查看Ts层耗时长的函数和阶段。
diff --git a/ide/src/doc/quickstart_hilog.html b/ide/src/doc/quickstart_hilog.html
index 949612296..7c9528d1a 100644
--- a/ide/src/doc/quickstart_hilog.html
+++ b/ide/src/doc/quickstart_hilog.html
@@ -799,7 +799,7 @@
- 打开Hilog开关抓取Hilog数据。
+ 打开Hilog开关抓取taskpool数据。
diff --git a/ide/src/doc/quickstart_hisystemevent.html b/ide/src/doc/quickstart_hisystemevent.html
index 707ace392..609629f5d 100644
--- a/ide/src/doc/quickstart_hisystemevent.html
+++ b/ide/src/doc/quickstart_hisystemevent.html
@@ -835,7 +835,7 @@ System Event泳道: 以条状图显示,红色代表后台任务(WORKSCHEDULE
-Power泳道:应用各个子类的功耗柱状图、折线图以及应用各个子类绘制的图例,鼠标的悬浮可以显示出各个子类功耗的具体值。
+Power泳道:应用各个子类的功耗柱状图、折现图以及应用各个子类绘制的图例,鼠标的悬浮可以显示出各个子类功耗的具体值。
diff --git a/ide/src/doc/quickstart_memory_template.html b/ide/src/doc/quickstart_memory_template.html
index 4b4f3cf39..ebbe64ce5 100644
--- a/ide/src/doc/quickstart_memory_template.html
+++ b/ide/src/doc/quickstart_memory_template.html
@@ -1126,8 +1126,8 @@ MinSize:Gpu内存的最小值。
- 点选Dirty,Swapped,RSS,PSS,USS的5个泳道图中任一个显示的都是一样的内容,会显示Smaps Statistic,Smaps
- sample,Smaps Comparison,Native Heap的tab页。
+ 点选和框选Dirty,Swapped,RSS,PSS,USS的5个泳道图中任一个显示的都是一样的内容,会显示Smaps Statistic和Smaps
+ sample的tab页。
Smaps Statistic的tab页展示。
@@ -1304,60 +1304,10 @@ Protection: 内存块的权限(读写执行执行)。
>
-
- Native Heap的tab页展示。
-
-
-
-
- -
-
-TimeStamp: 时间戳信息。
-
-
- -
-
-Total: 该时间点Smaps中type为NATIVE_HEAP的Size。
-
-
- -
-
-RenderServiceCpu:渲染框架数据,计算规则为该时间点上memroy_rs_image表中type!="pixelmap"的所有项累加Size。
-
-
- -
-
-SkiaCpu:渲染框架数据,取该时间点memory_cpu表中total_size的值。
-
-
- -
-
-GLESHostCache: GLES-CPU缓存,取该时间点memory_profile表中total_size之和。
-
-
- -
-
-ProcessCache: Total-RenderServiceCpu-SkiaCpu-GLESHostCache的值。
-
-
-
-
- 框选Dirty,Swapped,RSS,PSS,USS的5个泳道图中任一个显示的都是一样的内容,会显示Smaps Statistic和Smaps
- sample的tab页。
-
- Smaps Statistic的tab页和Smaps sample的tab页展示(同点选)。
-
-
- GPU泳道图分为GL,Skia Gpu Dump Toal,Skia Gpu Dump Window,Skia Gpu Memory泳道图。
+ smaps泳道图分为GL,Skia Gpu Dump Toal,Skia Gpu Dump Window,Skia Gpu Memory泳道图。
diff --git a/ide/src/doc/quickstart_native_memory.html b/ide/src/doc/quickstart_native_memory.html
index be0ade86c..34526429a 100644
--- a/ide/src/doc/quickstart_native_memory.html
+++ b/ide/src/doc/quickstart_native_memory.html
@@ -891,12 +891,12 @@ Memory Type:内存的类型。
-Existing:框选区域内申请没有释放的大小。
+Exsiting:框选区域内申请没有释放的大小。
-#Existing:框选区域内申请没有释放的次数。
+#Exsiting:框选区域内申请没有释放的次数。
@@ -926,7 +926,7 @@ Peak Value: 框选区间内内存申请的峰值。
-Existing/Total:框选区间内剩余的内存比上申请的内存,其中浅紫色是框选区间内申请的大小/整个时间轴(申请+释放的总大小),深紫色是框选区间内(申请+释放)的大小/整个时间轴(申请+释放的总大小)。
+Exsiting/Total:框选区间内剩余的内存比上申请的内存,其中浅紫色是框选区间内申请的大小/整个时间轴(申请+释放的总大小),深紫色是框选区间内(申请+释放)的大小/整个时间轴(申请+释放的总大小)。
@@ -937,7 +937,7 @@ Existing/Total:框选区间内剩余的内存比上申请的内存,其中浅
-
-Symbol Name:每个内存分配的调用栈。
+Symble Name:每个内存分配的调用栈。
-
@@ -1009,7 +1009,7 @@ Timestamp :时间戳信息。
-
-Net Growth :自从上次Snapshot的增长量,是计算分配和释放的。
+Net Growth :自从上次Snapshot的增长量,是计算的分配和释放的。
-
@@ -1019,7 +1019,7 @@ Total Growth :自从上次Snapshot的增长量,是计算的每一次分配
-
-#Existing :仍然存在的内存数。
+#Exsiting :仍然存在的内存数。
@@ -1032,8 +1032,8 @@ Total Growth :自从上次Snapshot的增长量,是计算的每一次分配
- 点击下方的All Allocations可以对Allocation lifeSpan进行过滤,有三个选择:All Allocations,Created &
- Existing,Created & Destroyed。
+ 点击下方的All Allocations可以对Allocation的lifeSpan进行过滤,有三个选择:All Allocatios,Create &
+ Exsiting,Create & Destroyed。
- 点击下方的All Heap&Anonymous VM可以对内存类型进行过滤。
+ 点击下方的All Heap&Anonymous可以对内存类型进行过滤。
diff --git a/ide/src/doc/quickstart_parsing_ability.html b/ide/src/doc/quickstart_parsing_ability.html
index 9b4bba0d2..48f39267b 100644
--- a/ide/src/doc/quickstart_parsing_ability.html
+++ b/ide/src/doc/quickstart_parsing_ability.html
@@ -800,8 +800,8 @@
- 超大trace分段打开是对现有配置抓取的同一种时钟源数据源的。也就是配置命令下发的抓取有效。Htrace数据按照端侧切割的大小分成多个文件,并将不能切割的hiperf、ebpf、arkts的数据单独存储。IDE通过将这几种源文件数据存储在IndexedDB,并调用trace
- streamer去进行切割数据,并在IDE侧过滤筛选出切割的数据进行展示。
+ 超大trace分段打开是对现有配置抓取的同一种时钟源数据源的。也就是配置命令下发的抓取有效。Htrace数据按照端测切割的大小的分成多个文件,并将不能切割的hiperf、ebpf、arkts的数据单独存储。IDE通过将这几种源文件数据存储在IndexedDB,并调用trace
+ streamer去进行切割数据,并在IDE测过滤筛选出切割的数据进行展示。
@@ -810,7 +810,7 @@
D:\deskTop\msedge.exe.lnk --user-data-dir=D:\Edgedata
D:\deskTop\msedge.exe.lnk 浏览器的exe执行文件位置(或者浏览器exe的快捷方式位置)
- --user-data-dir=D:\Edgedata 指定用户目录数据位置,本地除系统盘外的位置都可以,内存尽量大一点
+ --user-data-dir=D:\Edgedata 指定用户目录数据位置,本地除系统盘外的位置都可以,内存尽量大一点
@@ -850,7 +850,7 @@ Single file max size: trace文件分割的大小。
- 已打开的trace界面,增加convert to systrace按钮,支持将htrace和row trace转为systrace。
+ 已打开的trace界面,增加trace conver按钮,支持将htrace和row trace转为systrace。
- 打开Scheduling analysis开关抓取调度分析数据。同时请打开对应的Flags标记(Disabled切换为Enabled)。
+ 打开Scheduling analysis开关抓取调度分析数据。
diff --git a/ide/src/doc/quickstart_taskpool.html b/ide/src/doc/quickstart_taskpool.html
index 007e0b3d7..a0152dfc5 100644
--- a/ide/src/doc/quickstart_taskpool.html
+++ b/ide/src/doc/quickstart_taskpool.html
@@ -797,7 +797,7 @@
- 打开Task pool开关抓取taskpool数据。同时请打开对应的Flags标记(Disabled切换为Enabled)。
+ 打开Task pool开关抓取taskpool数据。
diff --git a/ide/src/figures/Allmemory/snativeheaptab.jpg b/ide/src/figures/Allmemory/snativeheaptab.jpg
deleted file mode 100644
index 34d50b6a0fa5fc26f8e35ba2ed5391b89c7bc7fb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 24350
zcmcG$2UJwgmoADCGaw=&0!oyOAUR7C5D*ZW+(^zyY#L}#kSIa2WKnXI9GWB`Ip^G@
zCPR~&+|4@;{{DCF+?n^*n>%yXa;>6HRh_EZdw=`eyQ&R%t0;5#*5g}vczAbZUrVas
z;axkx!@Jae<1$e5jA`)`9^O+tSxNDCE(z;Xo>mVIYEWkfm#rgTKDgxk>so3Ug$5zR
z*Sn(q&ON_Hh#m#yYAucb2q}0PW*s!~^1+RpVF#~{yoSL~Zp`+38wi#~)w7~goI`Z-
zIKE|W+pm_)jy&Wevij}c{GmplSTbSmm4W@)x3Q@)unES&*>6dLWT!i{r`mK_aHaP2
z$h~>b<+mLX(Tf28Z*Q>4SE9{6vxW820rLc&N6J6<*e;5A5+5V+&x`dpUPCYHg8n?i6utUd_Kx#U*+@|l9Gt)I2S?ieW2xvX1{5gat-&ONCvFadXZ6%IFS$9EmMbUxyp
z3@Sz?Y-sZrf7v&`ncu92BTiS;ORQmAkaDMnVu$<4pNgm-j6Do(){p~A1kZ-B%`RWd
zj~vZUvR~nt9NOKVeK8ag57UeormQC?k7ii!W^!3>G(zXj2M_w{kt!r3x;C9C3TfJVDy#qn9c`qUbjo{E7pE@(3>Zg54mV8_U?iU6(SRn<^^dhT+yBSh0YR
zskWXn&+V8j;(khE$l4f`sx@xJWUT9_lw|4%bc;(N@Fmh{=xW-=#AXPiEq>bl_Hp=0
z;8cNsE3knbR8$PqKX{m_E%oA!lgEn-Fnv*reRDTAl}b#yf6fb)g9CIlMtP8Q4&`e5
z6sH2(x+EIA@{2Y(_GG9{!9%ACFKYEKQ;7vbl#KG7bizCA7fc!ltMFP`4Qe2dB0?XdMgCns$t
zO@BvD3D?An?m2oKDb(FNm7CC&J)YJ>b<|{qwk9SmhI*Bg@jB(&8YFT%P*N-%oiO*?
z&Uel?**RMk#--*)k{f>M31JnnbdVpnFE00GWXPeXtrUz@vuzu#xnxZ%;H<=fIBHK{
zAYzY&$A})sc$>C7Or~(#%Aw6M;Ynzr>`@;lpyZ7H_QGjzV**0+a9AdOr?s60nsc~5
zI(Kg=vCmv{y3JRQ6QWIJSDr+n?e1)~jYvLNq@iwqB1|l)i}qsQ+$k2x8gD>fX_o8DDE0B^oldG(__sIW(5cunY`kgH9XW%2r=
z?LJ9P)Y(jF6FvnFLGbW|#Li5>wT_t0MFL^*+q|&lN=J;%=*G#;Z^YD2>#oJ#*F$gA
zmkB4R(iRVx54jz+%A=|tNB5H5KX9o`wEJ**N5~cuE^O**)A5ap7@*rB@8chdUK=G9cjROSy+b-!vS
z)|~_*B_Jl1o9%`OW!L3(1(>7|*hR2fCvjxelXRcW-95o%NTi&zEo`;yhQj?d6hp&!0q%Q>{=bwDp3`7!@cTn*7tdJr!
zo}nfMloc0FTX)$5%)A1yJ&zqm9Av_eCk@O@f869Ped{RlArvFFZh>glygt$i9Ta3&T0+!5*oc(Avemv=Z1|;aDJSq%#gS6|bu%0htZc0qr>TU{P
zanl^4l;#!DtKN0+JVPPe3N%ck4cCW|?Vq`8x`zvFv}FyF@-ogfyI%0(jp@Q>-)
z)MKND98jDxxm7MY(#ON|R#zsSA#Vbz7zUYJYHPK)-O@6RGZXEO)uv@)$Vt2PVjUrf
z#T$O3?&^Ru%zA?C29=d2VnnW&m+rk;Yet>gmucpg&KK337GXU<#
z%JBts@0~XkGrB@m=yS=%c$bvY!G6y>=;mB~s6Y6H&L2J9N5`-IaBI{FXad7s{L
zJA_%(-#-%?%xHvL;2Xccv`5S|X!HVnIWDXGvy7+63v%#3UFG${m6Wh=I{3(7qm7PY$l7`o;;daA=YGZt|CC1*sSGdc-al_5#zJ0HD|EIiGk-EY
z!|Pc^Vy*o}r6|HR5uY8U34*ahS)rOyt=;W0q0U&D5J9u>1p}Fh+(L(M@x;=raud>Z=QFI^>Al
z-O;J?fDHI0efNnM*#pYubqX~_N9!V?-|~v#Ih}6aplR!O0*mgBm3;t>$$?S%`?unI
zLQdT9oJ_3u?;Rdzp0Gn`8Gk2_1AcO=8|m(p42Mh(7FtRg^+6(1M}9i#$?%162cpLxL
z2?bsek+Y$h$8dpy!`!Z^9I`-?L@7p44!ys?X?7!-TJKX`-FRGxM3I#|N8a5vD_`58
zB+`tu@1O8&5wdYy_@sZaj6$>4q*Rf}3nWzUDr06xxf?UrP8M_;_e}6|Ix`gH#?`1S
zl%3pOO1#-)F%fOmERikrsv|ddx=EU^Uk1zUS{zoIBddJO4exet#Z{DAw
zZI@tVB|_^Lc8nLqp{k@5Dyay4)kvX2*_1eM%EtDMO991neRHuZo|@BcPO|1U+0)e#
zQuNxFW3&|J_=g8fxvqAu#v|ZN^*gQ{@~H4)GxV<-{uA3BVovL(`mFY;%ta|Trv1Gai~BkLgo|#DZLpW25@4oL44mXY;S(ee{#7_7n{`IEKxYuzO$1_tZ
zr9(<^XId#S`RmS1ivG+51}HX}j9sr?wEMJ1(8Mj$fQQ%Q<#Ni-$w)vru!wb&O;yYA
zP<{~}C6q9?U1sxW+hcpa3R}UZ_x_`*KcpI%=(3lo)de&?y7XUl0lyzngu>EIN;fhW
z(Ix9~)*bXmU7vcK?Ok=Yoz5>Hd{rok!kUbkA41-pPSa6S
zQ-mnw@IKijBq9PyO|J$zR2Mr*6Id9zq+|F;sv|HBwl@~QVmB7}hk`ZZ9%jYNzD>!6lk~iu
zOGVS$cHCaGz?nPL`$KK`NJS6K^tv?lE4Ms;8jgD%b;9qQx1{8B6*XKllNwe=^$ZkQ
zt{%TI-bqax(?o$rcho!P?#rY|NiM`L6*tlStA~hdx{$*yW(przu2T27dTbijiZLta
z&RD(5oZGLexyg)sg`=^Mie|O@$S9R<To%Mf+%>`PldiO)T<@yahc0`T~OS9#J26)h1L}
z{V}i`1%VQ7YY3Tsk_z!~m4?n9oqGAtSIEPh@(g{4IAtXT2rwDB&Vy-Xv%D>WUX;67_Y0XGQ>!k<+!FSOelREXB>Hq&S9@QVaX~4`?kAA0
zZ_z9uf&4H26ox|X;-1-;4n
zD<3C^m;)*Ms=Bt+EbKG=Hr3?t+ap5M7PNbN3r2`4*@%dRxg|=X%0;3TVBF!ssL5$Y
z2ccwvCIe6D0ia1Grz68fh{56L2!x!HO)4s&BU``n2esgpZ*V&17tmVn%DFfh0YNP`
z`n=aAZ*+CG8A5gHoKG9(tkSf*(2d%+5K2WOYTZP}n@RKDtj|8MQAU~m%Dcdcphvm
zDr=EW7rbLI+!QLA$Ash}JLm%hV4=3`fW?T%!uSD6ux6G%6Y{*UrIb{Je_oTZ;K-Bl
zujN`@X6eQwgGbG8G(Acx8tev(UIjSaXI<&ncwzmiTuIS>IBq=}#9R~-_}V^z)y-E|
z(4fNrjD@BMw1xc91O3?8i7@V{Jzia9L7O5Zh9ip0qI9})o_AWlV;(cvWP(GQ4I
zvp*Cm?pMYaEp2fD{9;Oloa`4;$Gh(Rul%;btn8}9lDJ{1bkSeR7xup**Z-N2Z=lj)
zNwUd^(+4wBmv~^@yYox_!ZJA;-Utf|-{(i(ybJI$LP$t*WrcqC%bJ`=74f{bfvrse
z#Ar67kLS?L{%?q1;K4B+R_PPY2M8Ga!(54i`rsGC&K&HXIm;A}d8T4qDwxG5pPf5`
zp!tk$r5|G~`*ly6SITv+=$uuE_*Ae>bGVQ??x`*@qzd8bi=DQR;9U>WevbFlBMjhq
zgc)ZLR>cnWCZ}zYX1*_cfBv-SH=UrAsz=y;`2d`o+ZHti`r+NFaXCG^Dq^P#lcI6B488&E*G0^@Em#5
zDQ({MkR)lpJ1p!d!tnk&5HIu)HOiP`}^;+ZHsZ(#U-diAcK;7dVTQ|k#8&b*&<
zLqnP=WPcfJqZ}&I)Gpv>em_82$w
zR=&8nsZ><|Lv$z-p{IBcK9Z1Z)bnV#=wc`4By&@R=OQNG|U26pj2d_d3Jo
z1zMso0K?-Hh0iy1JVKU6m+8EZSSQ&}$R&@6XcN;KuyWy2@2Pdi;sbTLu2mLz6;p?L
zv
zXs2C9o&N=&5Cyb&fI@$Hrg#bOql;ww6+EJCRwx=fN}k<_>LVHiiA#)elzVDt5|8V+IAxvBV|?7qsz7tigr%Fo-)3`Yu97KJ|=hjk3jT&>c3e-qJWf0hHn`)T=ryoFqAZMk#65U?Cb
zS&Pd93}l@2OJl77bHQAYh|dKDX`-%CP5KF#Nlx*Oy6KqkCxT9#qg*+3+7H5opqCOM
zKtF+1xuPcH4(*!R4}SN!FVLrn66gt7R+XHLZrV?_Nv=NPn2lUj0n}CWWMSl>+HiG(
z`z)q?Mp^elgamXz`{$iUvim_FIv7~Hx*xA-UA!@P_aPPA6loqomfsn*d;*IDA}-z6+MU__!Stz0BWi!uRC=kwfhN;6S{7
zaA1Ijnm!^c)Uy#gV@qvxlTh_vPMlkhD)OJZ0RKN6I%lFFMDe&2GPv>2DhwXMp!)86
z$i9D<`2mn)Td%I^jPY$@jV++h2ViWX1g`r!@o86ep5mq{1JZigbS-_qECc|_at_x#PP`HQEM
z^V-}{Qn|>Z`8#yhUIhC3S8-GU_ehHYD1m$aO;ztm#Gsp-n@q5Z;ZqYZr47R4B(KeA
zNB2YW$pMNv$1!Vl_BWch+O`hkytmw!(qTJY4V`Ze-rU>--iNxYZCegzDjT+hz~%xN
z=oJ$(A?If^?`Bn#rl+TYUS)9j$#jidJJ+Br)HkZl=y(%ScY;BAiY|XKv$aKGP7dl$
zcjOV|pJwaPyg~?VA&bH18`_i8(^zB-I6XC$mX`LjiTiRR&=C0a*zoXhU*ERU*`AVX
z3~nuAwEYo-b=c!I?Q$FQvm%9duFKNFkGbvUn)-gqFe7+Sh&sf?gxl_-Le-<7JNb39
zjJDg5+Fc4HvMZifn6jrDy4xJIk^`bS-s<8-BnUw{85sj8g>fUZ+}JH&o1WIY&c6I=
zg=Y@FBhLO}vI6UyQJqm!Q`6o7>~?BuD&h8>=5H?yRa8}@>duL6ukN?V79-9nIK*~A
z{*(VC9MZ#UWdv+eH4#nFnyt&h=G3l}==$cS;_KJF<&;;x@!1(bAm!8NM{|S$dqJ$}
zPy6J1qn3gnz1Q(<9H`AWKp{-ol75qOTRhO624?p0(Qn?1L=+y)e#Uh>
zu^X2EjM4l?LP6V;qHK|zO%P3a9IvT~dNS4I3;elai!**+#N(s+HB_+$EWg^{kz#Be
ze$0IwN%%XDCf+^DSlu%n!vD$fRw;3pt{er9kV@AenXv`#I
zZT^05)U!Nfkh>EM(UJ)u!
z@7_F2t-H1@0Io48&lUW|-FTw>bz8p7dZ_pZp{u*bb+(#{*V)-;H6Ci#Hgiwop!s_{
z$Y(j{8J5d;?VE-Jaz+|i)Lgp~Y^QU{8t16^?{g%*<{FeLK6Q68F+rQg{iYvR=D_Mw
zqrda_QR)l|MUjz{7GbN%TA%5B;Uw>CmtgJ!1P@bFtwbsM2k~49juO~*Nm40j7Wp*@
zO)6D1GCZgD#h>7U&yR}N!**y{+B%|qM`C==Zo%viY>jnQRaFPDrMqh*rY4K!OWe3;
zqmzF-#8#*;k0!WXT0!Atq+Rf6JpD0GHBH^S;f?kzFbeY!Qadgx(0mMC2Ejkmu`kLs
z`hI8MpO3M!6!>LR+o|pLJu55gL%M%Lfq5yj+A+Njh)6>(f<-KaDlMC7q
zm_au5=t#(*}0+;o+(n@KIVh@D!t2Qi*^!L
zWx91xS?gpJVX}wBmL}tSKibK#
zZHpIW6J({{m176zv)^YFa5>sRjw5B`HX^W2=2bdXbJlIU+q2Po8|W>Gwg6k4KU2X@`_#c8qN#r&G+2?8#@}L~*fX
zee2_Q;H21Ve$(AizIT6ndXN%@C6GpWT)io;*GUpv&LczC&)E?-kFw?JAv)Y->~ZqmPz2Jy&U+j>13al9)W?*$C8#axSJu{YsA=
zp1c8je|hrwG_W%{+e0}%mMCH6GaqnJ8IX{O{rNf1*{qYvVmy`xz1E1K&&BrfPxofSqYf>link8IIO@eph2;^T<=^@t}V6T6=#axjG
zM2gLQf6#Vh>A7NQ(N^WOOTKza^bNH<&!yLSbHLk{PYC4t>$TSODrW}61`Ox^2})xoBZyL{-U4acfi@&>xv3~6J}Q~yn0
zegoiZ@;fCxU6;TAm&h{nW_5kRHzGL6VRP{U>R!V4y|y;2aI=z!3T8F_SG@qLX_JJ&
zCA_b*A$?2j+7`iq1{fh@h-G?s+Hp#ZT96UkUo9TK-d5P{y5%cjsIIIU!8?6x8MLzy
zF|J6wOASMZx^Q1^@RC(s>R3vK$O01Tzph*}KX=wmMLqK%JpH=w4QlE+b5TZy>9&L5
zJxwr`LLl#roAPDZ!g5|cyzLP?p~>UDgukd8+PY6u?yug>4DCnn6N}fyV#~SrzQf#I
zXxv{*{qTsXX@KS1>YnHrUl2fTk5-WvbC1wwWsS-AwSEdaVTdUefiX|Pvv>Q!QrY%bE`P7n
z+mYs}4b$ntCpq3z#WMQcPj=PPVk?!gqXtX`&!9zLm6C`kR`caAabjH=9@G4o#OXe<
z-5+D7r{UJMpJ-u9&3zEHr5x^1s_`gtwVHXZvTQ?ZPOhJ>IwSt^nxlgyo*SnTaKs8?
z`Pci($M1O_wF-)e@lX5dW!>_Fy;|KS(;l)aOeRnj1xLi5fz{EgsLlWjD(*qSLN}>V
z5zF~xce!d|OXAS&T)-E{~>
z);=~-^z^g{5VLKdj#_<;G>UYpCtE_=%16P}h9Yab?8#{!-{d|HCWU8{$u(4u-okMx
zzo0l0h8QN$=a65>nN3bTa!31KM^!Vybne=!z325m4Uy?WXfC>U9s6>8@)DpZHL+QF
zp8z{@SEw&eemu=jWcMnewc4)jX!SdhHj(1Kdob!iPVi^2FXtD9ddEN0h=}iq&X47#
zo(-O_)6P)#qdn-{gwoxY4$AlxufXjUdC?!Y6{lwv67l7|fmHthaURYPrtMd@(xQJz
zO@DlDe#9P_=30sB)5_?${_j(?^b-hbn?QeBE)=Ht$#pizX50nEq5SDjmA{!apAxS+@C>!hxN
zj}+XVYowrcl9jp=?u_KgJt*a1Hr=Q`onq#M^k}<1ohj6uk2&pytRGn(*d~(MxLLDu
z-HvybO}F>rwB7h*-MEKw1Wa))#HzjXUEQB9FucxOwr;LWGpxY3_0$QTKAaWY15nYN
zaU?^-P_H^km3T7BrDQR0iW^w*&ZAQZllfQpO&Cv8Mrl#VWw1Qk
z1O&Ul^eK!QO=^xr3NfCLB7nG`sgbu;-xR*xKqe|70
zw9k1ZiU%vf+yz?*EzbLnNdFb
zMNg1e(=nItV%hO4J-Fn?mvwIHj@f
z6y}y0Qny&C7n@8*11+DpNP5mA*}BGeRH^&b>X;hDI2es4I#r|@qL@}*Ok4&lm9Qi|GImF$|pHZG}=4pt5Y
zTkZ~hXPC`;N0ec$+8PsGNj|lye)1~JXJ5U10+ZA~)}mG`+a4)B>2$5dYWSl$i^c9>
zY2Ln%O1v#ke4aI(P5H!z^Y}paZXkKpWgZ@0(~25P@A%6fe{T=QL<`)OJEb6z&{Q8C
z2pN+b(vHXxs^iJa<(PEI%Rg3ApKwIqTb-t7?exN({R!pzIy9*(Ckj+q*rdQx{7u%Q
zkUp2g#!Zkptyw$O7L0tqlrj69<-N6UEzV}{6UD*{OIZ|T{V%J2`^7?z*o7GvJ%~=b
z7GkqSA^fa7_38KO)V&~|Iibn^w5idRJO;+{Rk2U+>d5U}-{CD&fuL~;?OIeE*q4mu
z?Yc2q7Tob&CJsqYK7f#)Z~F+bcD2y58fV)U==hf6wv-^}{Tt{hLV)&}Q&nq2&>k(y
zt1YXx^0|&@CJAHfmM5$1>qNGl5gs}R+14z3_}VSWgtX!11rw9@;4m
zd@_eO7?I*#&&f&QE2#RuSyS6=5#aBilRg-$t{$C3-+i+ZHAHfV|G`|7M_|Kzt|Tq?
zXJ`Y?dLF5W0=NBw9*%2MohG&v^-aZ9wOa^I_D2y{*?})tU!b$_Np9c~
z%w#h<1@i57mX4>Dy)0I^wK_?T8Q63gANR5qR8=LF+dw*peRWe-v567{LC0OKYbzCC
zhq#M9AN@kGFenTAgVw^u=*;HFpYP@EnA-}{a|#a~bfsg890;Y%{aj^1mc?B9Z^-cO
z1od+%&x?I}9XGY&Y)L~|P|x;x!+QJ((!e`y0e;@yu@P2&o)0oQ&Je<>2*+WVcKdhl
zd|!hNuI@joXEvp&tO_7{WyQpNic#aX=l2ng9l%~ghrF|7cl8TYk;5vcpJgWS>fio_
z6w0vF$z&39(}|UAa1@C7n&|C~)cGv-1A=*1{rk9+g8Ej2_f6`rHr?`y+E>XN-hQah
z6LO`0mXTeWGHSJtZkH_uJX>)fV&{qfLhf61k^Cn_9f$2yICm%TJ1hnfN<4Z0nG)hRX6whS
zf5bs0K&=F``;a=MR@ZLD69cE-_z}aAcF%wdPollF(Taz3#O-o))XApHvvR%-49C`$
zoH6DFn=JSG#_}v(W1e`bZ%^G;zew0R!b%GG(y|oc;>m*2B4Z*G54NYjHllK@qbqPZ
zQ0am5XE)UIbe`($umwoFqJVTW?%%;C41*p4dt%VMdNq1L61DEklOR7%1al^82j1S`
z5U7D2@2yDHt?kur=7LKxsmJrEz{~2v-@6ec3Sc!VmxYLl45efdm}~3KY-aI1B&XrY
zbFcHd%^EX;N&6v`z;zJ$$K|YpyIo6cTLZA;yp@3rThR^OEZCT49g}0rjpV(72~7F-
znRp9Nk;9CkiG=i2{PKcmicP{x3~sI`dn*G70g4LH=ZKA;3bw`L>0V0W$!8yMlBaoA
zwuIy#(qT5=x30W7eeEW{8u`+yW|)6#*5ipnuVf^xSxhDNEpvEu+1ms^?K!kkqXX|S
z3BUD;VLtDD{kOVkl2Y^A10`Q{POQ6q_Bl}-e*o?MG+3Ln$GbgPr_Fi|pGQkllJ;3f
zXDvrNL9X$~%D&zA5mJikOrBznmC&BC{??2R0%l-)W@KS1Fi=EKp+;UC#B;#YomBJ=&d>8nHc{rUyHiebuL$5f<+xe+fYN39BrmT=1)EYekaR@e({pD7)T;ZVcnQ6Yuwn{lO#4NyX`3pnbchMBpbDEUY8<(
z{4J9=vj*t4uEa+RK=n&g(|rTvFLzBXJKNqNP7v~6BPdnbEB;^?lvAnIADw=p+H>69j_--eZw;5^%1t?_$A*Oe)$_
zKv@^GP?C0JczfiYgPxOkqV`k;4>*|eev%xC-8hd==MD$t=fo5Mhef^9tIqHt(ax%N
zUfI}we|Y}Px30&8>4S?|mf9P)qXrwt)#m^*V3Q%7C&2!}*>_wBCpWnIL}W(Vk%pEp
z_l)H$P$RrFJo>%D*GjT$_csgH06qe?#=q6%S@G9(4^B;_N)b0{$g9>cPdZ7JLZ9`G
zdebh{E;&;@Ck*qt0!%p1(L2zwR7!Hu>b>Jh(qL-lQDU$<*0JerexGTPdjI!no%O-#ii
zJ2Ol@8MlGll!1g=i5B@3E`+#a;3mJ>CxvS7GD7m>w9UZJe~`HuLsP`u%^R|IgcN$*
zjpxTjDwwJ$kxm{ka=LV&DlnKOjO}0I+KZK@Y
z_~8!8j~wK$ffGMu?>y73Rrk`asZp)yMV36ffN(PN+I(8%V)tE$!r&)zi5Cgkp*gJ7
zoZL<+CAtA4FHFS}K15}VrRH)QotnS0k^S_fILg%)qI);3%#cW1)`f}t!>57hhh>f5
z)2WQLCVHwr6-Zl8KQ*NZ8LWMb^fzH!5J}HWj;rFB6F6(zA4`8sU`}tcpQt<%#S=F8
zE?_VZcU_Oe3t%QMJuMXg0#d|5GesKmMiH&BF>@@D_j$kb0Lv}-ETerRpPA4uTB}Q0
z^ePTXS)Gp0+F9>&(7p%M@%8W9wKwR_Daj}P?uEgZc4fN6%C!tvu|E7}AH}@5X;@1H
z-^{SxR7%S(W%PuzvEHSud+4qpNmfC0D1-g9d}6`O9#xli`RI)^d;tn@v=07Tw?
zpWN&;DMs(~tOowDbOcy;4`Bb@xBWRzExF>Z;QP@pygS;rWR-V_*22HPCuswgwAht5
zp3twN^X&u017uS)6ZT?C5gw_<9n&z9HL&44Lh^2DW&gW04kTQfTGun5LiK9ze1C{KNJOxmgMe7^kxOD2fWh$=X$F5JW|FUu%2WYHC
z1KlD3tWHut_Fq2v&asgZ6?L@OTbTRngdTCTZ~9^7yh<-1EEDlW+g0QRhhXnlTq=0;
zfZ{zpH!$_5BEi7zFCwCV)f9&4;LYJdfC$e<=O^?A!&iC765^bz^6%IMU)q&9thA6z
zG&jyu8yD?J2BH<-au@qXrF+>siUeVi+Q@DayQuhGi`_2k+H?Sazg(r_wAvd03mIJR
z4F;GV<6I}#h(*kJe(3p&SFNwD}D$XQ~GL2|K2*w{IP^}
z{UJ9IU1JgZI~njuSqk#X<0#jRK+!?rR)o4;5r6P|Hj>7WF<^
ze`sjSCU1X{_=EOaldBzX_g8nW?uD#aDk49chr+8aqpo|y9em5EIEP{~y0pgz2fyF!
zds#jpqEr^jBVp4w&J~vs_t4RnYCJXrV2K|eefMmqak#y4+ncH~El79O;`u#S=|ea+
zl?GtN%8VTZ^$?@FWPG3c
zjQ2+?XaXehSx+9%H+etlL-u4gOiyjbIwdD%(D@D5%dFDDGjVm4*6O!(fW>y1PO2rD
zIIxwFW=A;Cm7orK%zjQM4$@S$OPGw_%t7rt$lppxQ%7CbMaNqyqSYV194Y~Vtzpr7
zIR!YPVB9iZt%fCc(JRg5-2$}IoC>v^#m?#^?M^KS$dfSn-;r4{n56tGMKw!_!m;&}
z344Hc@Av%K`WKb;TKJEsY__wQx{7P_D{Ti$kd2~OoB$927Z7#azNVr(;coF$>L|Oo
zS1)EKA0_F|@LaaiXHHbS>(hOEghR$A$BCa43lNMq5){j|W@W>zx;sETteFnu6a7}$
zA=ye}Z@v0VWU+y2y7ub
zBA(OVt~C``J-XwnIl)w{nMla6?6156hsDDCHr}u*?oKO}mKOohE`C#jEq6?|poMSk
zzEcsbbfpHW)m7Fj{~kIu6{nJ0Qx0$J{&W}EqbAn>(w{V5CmOm2$FblhN8lA
z*AeU#5w9$Bjw+fafgLNNlik1@#7H87wNJmQM$&r;E-x*1$z6VpRWWmS*Q{
z9PTzbgXQYgOJ0P0Zz1wzdpJ(}86`Mo{!K%zrn8-HuahcC@krJOM0}ptzK%SN<2^cKz8uf4t$n$gkZq&1
z%*xt2uWozZ4J299#&SvD@H0bKUkHjyS~Ld2&A)Ft`;PX`bim8&*!M3`>IFGuihn3i
zoQ%6}zo{C}H|%asxEEj5=gzk|6e%B6_qt%YJ8OiARaZ!uJP~XHED#S5JOoh(t~ACg
zW}z4PDU>bn(_e4B$9T2+LyY)H+)nMS17#X!Z_7OPUZ%T+R+NEE6y%r3slarGPI~+X
z(qgO2Qs1wRJSGN4s*iE7)J)n+ja9wOLBYe_wfx23&`9n|^`;N{GTsM<6#~=}#lAG`
zMRKmvwq%Y~XQB~0ct?!HPCBbUn`C|o`b#&j;-?+YO>PPiR6Ks&Vt((NKl@(-p}2^7
zvTCAj$3;e~GVk7L>-X75S`K_9jDv2qqGta7{97=DEs2z5!z?!Qv94elbI9*TypMwB
zWkMOMUsQRiyw#%KMugE+xuSj$iC)`mFg|!EtjSj5dg?BR38?(_;Q5o#NonqaxsDel
zP%DTvW|E02tPw|XYqKX>civPf?ucHc&Sq*f8e5=qcz(_4{gA@uA#+r=i3#J^gKXCQ
zf=X+c<3wW1{;L{@m7HEF?pEwa_N9kKLep6^2I}%FhJP$17IZ(%-b&m`&Ds#4w%J-)
zB);^K%1gzQEYD>9wIEzotq|FAJ)KXQo@oA&QW|mc205r8P)pPU%j!lk1%2U}($<>w
zuKac-DBI%rP*{zj3}?*X5mq!ZE0f=vvfDfK2*eOfKHk3_+BFe-1@F`>Qp>jYE3IF+
zvQ=dnTlcOJ+;Pg|A^R!grqiB0>*s{);@AM>Ht0=}&d^WNTYl_MFx&grYCfs3jcGgv
zhOW=6NMlj5dBwns=30{=DqY!jEA0?v!K=Ssb@mno@G
zZnquqK2mv)C~yzlREm=}@!TtR?pGaKTa6}1)pKjV{n_
z>V@9|Oh8aqf$ImD{K^>zzoyV$3qicGLOdoL((IwS7qgU0nwka9Km}*zi(MvXqgfrDa!Lr6{cg3k7bA0EvQ}<)>mU%3BIy
zf3x$WSB?H==Xow^UR+ZBs2~=7aXC+)`0IabGxrQlO4RFtlKg|bjKWuZlOrXV_lJ2)
zm-LHah%nq$r+Ube1%Nu99&VB7i8jc$wHtmXTDeEU-5+fFhg7&I6zkCLct!g*gZt8Nby9#G23e7+2S?Ew<
zJ46CZ)I8~fko})0Pae+G{Atvy*}7{Q$^2w9hPAN8!_`I(gM{#@;gvH#sr``p!Ym5N
z@4rPkI+kMsop^zv@N71Dj&~C9spgY28clS3zpm;KJH@O9M52&xUce?pe(%>^m`!R&$c)>`&Z(M9Z8x(rz5}>
zAZf7V6NwI;V(Md@LX1A)?cDkN`z-L?;7Ktey)oTJ)^z=(78Pn;*dA;2*-$8|dtC?c
z7RZGchW$g~V2?$$MP{(cL13CGQ+&eIQuf+OErO{H<5%Txn7iySOJOdJ2+FPu
zQ848_$#k$GLlL+m4#2}v4bG+Ey6Gi*Ry?9fc|>mXrV+PA?xF_6GP9Jo}U&e@M_DHJ~3ChvO6s#Wdp&6I-SL?gt%RcPU~H0M##JM8quM1uhGgfTx#-S
z&1)H_w)!-a&pU{dG(6>pQ$IImL~9ocmX6&bNy9cp?)GVhhsdfIJTJYX+Qgrj#)@->
z;p9?)jmjOXjju$p%Wc#@fV@;p^50WrU~^Qls1cV)wOw%66kd4@dlCB6l#+2{EXw5`
z*NO_e@kwD)(pm1qTrI8BJ0>XCCkTzq5&1RIU=A0ConlvIZK^5fB~{izx0dw1VGyV@z`HoKHF4^EGBP1^fQXGTLGCk7gtbvN))
zN$s>ST7j4iYR;bjXx+1N%m*d2>hj(78j1jKoBO|BtO4s0BJSxMzVV(3gj}V1#rXfU
za@|2qrR^Tq!did@DHe(%Js^vqNEd~TG(lRVD}qQ@DJgVT7X$&3CP7391Ow7ZLJhEp
zlu%3vH3V3yBtVvgCiOeP{pQ}8J9p-rxi^0$GbiUf=Y5~|`IWcG8`l=aUqx2ONw3@y
z^E{PK{^|*N8O{kU+;pgeWso{5u@Bq-))%p`SGYg1f_jlTV^u11FXfa#@|R{k$L*ar
z#TLx(UJ%uHR%JE{ak18mD?-6HAarw6Z|IDeFf$44S1@WvGV&OhfrOo-CIxvW^`h5`
zmp>NhS{Q7ui)|*;tb(3Kn@f)9?Vr3tvm>=tnXUr#tMjAs+{)+$IQF0yCu0Ip1nsug
zh#i|fajfQLA4u8Ix7-g!Z!pcst8d?0;Uo%+1WFaA_4F>n7NFUu3LpZ3rI0V9<3x6%a=ZW;9P8;tEwgYSXjYZ#TdO;S>aK3y8~J
z@}T`Z6!)VQZm5qvEUxijkk#u>zdUzpBf-stxlo=t^3Z$jf|yPi3hI{6IFULUC7+l)
zV%$($#8&}LrCEity5iKoC@hT#4Utv1PqHC{w`@uqhYE^JRhx=z!wm?tLu)=4H&RQq@r
z8=43G(pXdGg}J(Xgq>u9r$u4TE6yJZ7rgtKnjlFsjCvd-_Y1$g?fFvD(2~#4uLXk@
z6RAp0Ri8ySOQx`SoGtH>621QeZ(DfaU?eF=C+kqN=6Ld>2Gsn4EKANR1JE>7YaB=!
z75M|Kl?1?dvVB&JL-egeI6UcwK?e(H9yx8#bZRNUhV42yMDN1Qe0r)@
zpgCy@2_W+f9vpx~2gxp2nVEU>783Dl*rN-p?SXGKv+Ke%eZ1`1ZYt)LbeqyY8FLAW
zq!gQRsY8>trgcWIHR^WN?!d@WIvivj(}(o2OkAIz@
zml;8Z29Nlp>I%f$WqG3uU4Zk$c%t9^-ik(_WiCF|&hQ}1kPc4@n;nQE$@kuju<2(j
z>=U{Ks6X@ury2BsY6WW?qU~i3?}s~Bk-_mX;moaopMil!K2vSn2`kBHVpu
zCchh8SssXMnj!(RMhkL$*8CpT%YAx6EpsL(1MJsL>wuQszv|6ktNUXFnrKo-7*>+3?#H442s?|@d<(JTIhU9mxU^D-LfFd46yS3{;(5{q=693r44H*sm=1D$AGH3E2!`2poi}QzmFA!cE1>V
z4W-|18{f8SoZtTakJxTklWK$5$DE8AI|}J!nNDy^@=1(IbxzwOirSx57a3xjMBhsG
zE_cz~9)bMGT}#$OFO7!2#lzoGv;_IM(KUnK<_2z8o*7VJqXme@*W1g{7sBks3kKtf
zU7YH*{8$t%^EDoPd615Y>TY?UhMg+I5nw~1qXjzklD+b~mQh;h4@HbS44hVyzzYO(
zICYQxmvz4NRcSGm!8y#!Yd~ntv?r)+iiei3le=<}>Bg+H<#`*Q?|U^Uu=FvLTMOCw
z=btsC%IGq(H6|eG0Ct^8v@6KxdXW@Pmq$^0P&{%A+g*DXoXr{bfdhcjn4s8hgW+
zi}%4}5%0rDWf5uieR|G|>Q5`i+S9JHExintls;oug=lgor~`2|{G
zU1QPa?3h1O)yG>-dee6OEQ4ssRtB&Q^(V-m(ia%mt6$BjNXwBRcX;Zke?%I)sd0;}
zqs7E*wTVcl*T0^_f0Uzy>@_>q-Unm!RA$HQ*Ovd}i^>l{qY2@CSJRYXZ*J6$+*Dv3(>-)|EHHLMeWgFj<;w?T4bwDfwhe?=ey~ZSm23
z|AT;tGrzU*v%hps1qFc?_C?JuU}pzArRxOK))(Wv7c#>VN7jxF2Udk^vYn0=wgQ-@
zp5!uRZ$7``MpnW*HCBnZe4_B09)I8Tgv@O?vv*4;MO^Zrt)Z>vkVbvX?h0-$NMiRp
zshC0nScs{fYfXBoU1!-`vp>z{X@gu_dc@ZOH671$$&jlG?3+yu(5vi+%A$
z#wGM*^ir=2YdD9QV&fy0)mxgoX2^WyQSt%kx-z&^$tSGzSufihn~zXU)U%La;{*Ka
z{qx8ivlq~a8OZf}>%^66tANAh6@VF_*u(N$&4?gL5Hw%{sq=@f@Y)8nd9_~Ms@qkp
zdUp38o%%_xTfi4+<4COs4EB7VWF;1hotqewcylp55in7BnYUHPds0Zi6p3;|9JCPbXs
zbsQg<8TL=hOKH(c{&L^&6{`;Um-S+Wiwl4aPQJiA-oraFX0*q;uTZO7DtX;
zf`a%$4-}htuwQPnxbENLlv+mUpH*Rlv%A@*7{fU3X7zjug8eR$BXguSpI{7=$CH7Z
zuMn~F;>Q7}$MaNPh8#spYt_1F^PRHyArQ9&nGnk&JM*uTofES&Ifq%#zPCtuVzRja82Ia
zYTbs%Gy-`d%dpZWDVz_G?Q{om05CPK5%i^xeZSuRDR|mPz)Lf9T%9l6CO|gx$bfb1
zfdd>grbcA1G=hY#!dCG19IA9%Hh03g8PU
zd6@F^KMkg`x&bo)08r6OMmJxy?p8{#FYdn5a$S%@aD7sBc;9an=d5?ESRq&D5;$;e
z-0)KPiLn>NWelRy@$uT`_tdS^0T1LYu8Y?ucsct7o$?j8cH#i$sy-*n38m-V;eVz~
z?Cp5{Rqr0~nsN*9{1?5Dmfl}uK@E9TM&>z|jn4N7#Wh2u0zHrXrfh>ndA5?f5^iU>S+KoB%2jk46F5~BHchv=%V_UwaxX(^DbFdZ
zoz(!fqKeQ-6IN?*ivy=I2vE|f{qXf*Kf=f$J)UjbU(-@}a&Yu|J;qtrXs=-SnXi+h
zNniD*ym;bL*A8`|JA=xQ`1Q>mzwg3k``ixfOvCB#c8#mJ2l~HwWcQXlyTYsty3D$K
zUxhEy=HITWN<6HWE%hS%lklrSjb6xwQdOSlozukWvbS!vMPOw?UYF}z(@R8V5v=nI
z8R&N|zc#aNmZOwsbxq{+cH3%R*$3%?DcLR8(67I|Y#O_4W5z!pIE$wM
zBQ{op(U4MgdS|UtHKApyL3x;myV(i4pL=;;f3K*?x+0Br!|9$PO1py*(cpU248iZZ
zyvY!xbMp)#mO24V?I*6t-95l^;n>m587tCN+Hklqlk&0)2|V9;z@)lL9=B7`Xw7E>
zSdH16aL>W79yXBJUtt*-<&%1!CxQXsRo>u%|53SnFDYb|t6AC|F>Kyyx@e-@T3bk8
zNc%nWW16MKfX`!|_Dhg%uZ6soA%*3)WQiab2hi5#KDWY*@Pkd^E^Q)CL{(zd86zUV
z^==3Ml-P^Ljh*8yBt6AD-I)*?cwiPo%deb#_)Cy0Zw%O|;?@@22(xyKXNX)y#e-4q
zRvIaOwM$1u$=bekhKrNI5NA=ezUW?-?z{6i&j6?eXCF1d%}C(b8l5O`U`p-bWTA=UIv7LfdO&{
z{(;a#ASnAA~32F<#5BB~$NQXS!nQ=!buroPv^yn)wn7D;ql>
z|5X7&Az`WO(lWAg@(LO^HMO*LboI>4EpA)hv9fk@c5!uc_we+881N|Y@sps4$mdbf
zF)w1{l2hKKzD-Nd$Sf!$j2p&A5nxah<}#!oP8`$@84T1@Tl%c1|GhgxLqJH#DB$)iE_YG}}z
zU%rS29e>k(gcN3OQVFes7TFxoH~&p5_~ci$Lpo)Div6hsQ2l?MCwxGIDEQpmhn6X(
z%l*Cyweu4`G|5@(;W?J%xYv!Ibu9JfSmXm!Ycdvhk}%-
zjv7QH8Wfa*B1e6VcQojifM-QD)w#mlVR!mB#Ug*-2%WH>M}xMB;9tL)N0S`391K81
z;BE+vap3oj|BP5`gnnlVhji4Iy-1nn)XhCfS)Fd~Zzuo3B>c{bj*Y8(uONkliyA;lUGvfFEX1OsY{68g6&H(c%igvl{_8+N`@@OgCLMqvJM3Js#qqdl36zVuJ71_x0rQ#8_A9^=e^
zMW6Y7Ip>=`p+TlKA_onVZP
z|0g>91_s1yy6S*2msgZAiv7Pa&;1^LGDs#zL(Vbi8eg5N3@{R_*>RuwFROK=CP#yr
zczuHQqbY}qj|pPN*#9*K8Us4x!YHUQOmkzenkpU5`)>=4kQ%N#U2IZj-j!v|_y9;N
zh;!d*IfeAwp9-G%S||UP<>h|B#=&j7kl9hE`^QP;zXAdQVq8u0Y0J0XC*F3b*lFje
zck227GI9O~Tv3Y6ip{1=P$xOMA`I^=&gRrIb#VlhIkY^!sWlSW?H`tExDiZG*F~{>
zl^oChg+*eU<3(_yhQZqTC}WG3wSDSLinJB3Y=@g_(#|g;RV81yew0KI`8$5S9S*RXcMg$Qq6J@0-Arz=51By?2S!(
z^wwAHMpjW=ZYF5D*V&Y+>-)O9Eo5+jb4jnAQ@130_R70NiIFR{x%~}S&)e)p4+g}W
zMi&3r22|p`nXMgSSVGwD8*+}p3HFhqexkkSYxVOWh#D&ATwOV(j=;*A`s-R|#oUW1lV+PC*zAIkazI8P=Mn~@pJPuFm%R1dTOtSFu
zDj{4CZ)QrTqVcE&1^X&Znvg#)f+L{Q%-8I8`x+@ROhH(Y?@zrcD@kZ~^_#_Kh!x*<
zOwyvYeCDyBPZ2)vdg!nB<>_1mRTTN8{JA%8E}z}R#+ID+FWaVdYSf%kqHdvsY4!1E
z+?F$Ejn-Pftjk3!6D!0pfqTsXg=6tVK~2dnF;8U+Te@gxa4heD-a*=Rx8}55N>|rz
zopwdUHb;b_IlQ7o=BS*R#>q`I*taNT;;e{bH-F_TEt?GUZo6nw{o6OsKf(liD37Ly
zIjkuzJ)Mv~^SWUF&ox`lGc5Uw-+Lds^m${Hj4bgDS~1UAvpvXkO#EjYn>g
z5WU#7_Cb`EpN&^Me)28+CJ_mS2P3eq==xQ!JHxOUiWvcFwb9-|gW7prnf(@1lL>vlcf2
zjo`euUcIs;ILmpyV~=0qb9&Mu+j8pT8)(v*{Zuj7*vW1YDW8=#ikbuy(Rnq-JuOY>
zi;m7$WGz+dYThKcNVEoS(h?m#_xOv|-k3#C(N6RMCre3n1A>Rr+4gC8nC6nMMuTJn
zmwpkPMB#;Q20vZQcKg+!u??eFZ{`P!4lV9iMd*Nu_%?I98}5;^ikdqmGzR5OyrObJ
z`VJ|1Aflc}v<1h5sBc|&rnX*FyPY3Om9)&pJBSV3kWyJ-(%W<{dJwB3`V~B%S8=ETi%c#T?cFxyp
zghVc(K?Le`ZKI78(k`B>;jicA-=>_s=CQhBRu)NeG25hCT&hw~)FGI#JnQWE5o?tt
z^TU`cXX!XY7Rm?&4n(fRPtmzA$o3`KR2ReUv7fhVZQU3;oOk55aUiSGJ}=2GdDXj|
z3QxNc7dNS1+VJuE(qf$KqvWE>N~nE;vrby1^F4OBrU3yhL86APcC@F|SV?SZ&UVa2
z%|~q0QKxSV`6WJMWyf#Eb(rTBn)pyPT$brMm}9d
zWPQm%DyHC2p@^5=NPqD?j#Qm2f^+w*y7ErL@iNt3@q1igO%D3f1iXNLZhu_|7M#qS
z7xLeaPistv&qk$24NNlcN5c$QRex~g_NSDh*OLghnR*~UdNEG&w{%iG2@
zvTv+~r%~4<>O9xP3f_S$V;orJ+HrB?Jx@0p-X_|YV(y}{5K!^uavQfDDzrD46WYyI
zVB_HDTaB@=GezZ#==X07LkiKLhZS`wat@;ln|8iUPm135Zb5rV7b@v|mV%RWQ(1fV
zEBW_UZ?Lz}c=+PVPpqA*O>NAog^au}-MAlfwT$<=)OkUsdrln}bJ3s=x@K<&=ZP1H
z4Mi55Zz{Y_5OOHnb2leS|WNn+D6B{E1O
zd90`QOmgHG?b)U&XeqLhk+#_~s1o8VlQEr_
zff>bfl8W*%+l(o}i8jyYF%22IZH*z?U#j+Qhq#W`7L(VMRu(lT?r1dUEBOwnXwObOqRH~RA4oEOE1pg;Puo>a>|P~?la&>
zKis}ImA!V{Cd7(#ap^*zuBv__hjd#kM)#F!~nCTtr=P2!F_^)Ii_0)LOE>ShFA#%h5}8`
ztxYf7u>;X4mD$!h#m|-Sbd^)HRf!2u)^EFA;!h(VT+DWH9pzMlDz8rt)-xJfsejtU
z1u+KR9jBd3VoX)5s_LBTq0#6XJ>c^0jbmkga_ah!KRBL;1DD}!R*zGo;7!$ZNyS(X
z6xWnXDs#)Ou#%Tc2W$Ab}+hc
ziB{PSB{(Ep2?`A=(@+g#_aqT2udyu81Xe`CR(rhRD`I8fTO%`bVu&$RLzXej@^0}F
z?qI10;|loBP}r54PcWjl9+}RnNp{(^Yn|AnYFZL%(xjlD+h5WFhVz|%l^c
zn8{ff`*QN_($(mKV&$b(G|11&-4zByV9NdO@Oe~y1sar40^SGX0*hR_AEIAnx*5A6
zh>hqH$Iu|q=ij%>?sE1ccHW^u@Askm6&=aH9DJ@y1PVuCBq5)=ph04Hq3hyAD6X(&
z{k(%E6Ex_-I&8xwQJOqs#Aj^%+WImI4cf;E{GA|Zz8!onClG~O3oIe``H9SDzXJJB{Qa3PPA2xB{_xWue)_{tKKYZc
zQ|SJzFMifXKltff*^cA~Z87HPUcSA<~BNKB>6iF1a%Wv&$
z-!4oNw%(NSA=L_fU~l1)_oX(yd1j!QH#;ZZVIg4v_@DFUK;yQ&VQi1K#-u+ib&(>@
zXEemj{_b>6&5*PKE29ll5GGHCm=--uL
zRYBR~+YTR$^QkH&Dqwx<#?dG^XZ_9~agF#ulYM)z!qoY8sf-d?wb=xn%t5jAn5~_2
z!x^W!<{~b6tm#vDH1g25)@%rV*OHP_EvKQep%JBB=ZJxqPrMj$H5n2HNWDDWiqW8)
z+RpT-6(l2dP;bxn)h1ryQtzT6Rqr~jXUey{gH)(fD(hZZrQ)1Bs;f9$5i1-mWKE6;*0AMl
zm>w)V9X&{vFew=4KCUge#oXR|I8JhS^QMNWhz(?*2)N#FF`9a2=T%#lWJ$}2omsi_
zOG@=hsuEVJ_IqN&o7Q`M5n(tUZmQ6M@nEGA3GZYoN1E=9+)F_-hncf;HI*oG0hcjg
zwMc*C#$P^b-E;8Qt0WM$=Jg-mrwPwm^E(N*u&23_G@rD|%&anJQ^)h)~KDn2XB
z^tjIVoWduAG;&1sl$z%A;jeAU?4`SElq9IBAS5)8Oe(2C3KDikgDm$0xuH4boS5f
zKdb|S)V#F%D)3eV^k`b++m7}FWGNb?j0S=Car2Q;NHnMpg}=F;nwK8%>!Iq%1fqi}
zFmjU(4YGrE!y8c`cmW)~533b7NUlja68%M@+O9ivE*Q4glyc;RdWC|nV;(_(dFVg{
z$xI7m5n2e$QHz?PK{e7~OMjF*Fz@ai1TBRwi~(1Af}lU;P5;#2f6!kRY?XbWH~d7h
z`b$en33qa8NMC3h>bAR0V(|7;=!^Gq&!1SA6RQo-*f%@ptzM>lSHh4
z%XbwFgl#|-mbnxVi>xT%u9h@d7y^W90eU_GEaV(G1|5biufsYh(V(?(*#Tf#D}e_M
z8oL;_(sAgv56oE-E$6MF!0Re8ta<6EZ$t3;HM;*mV(`#=oEu-oBt79ANNtg>8~0B6
ztcEQA6*MruVa662*$$=O@OBX6w%WhzScJCeDdB#P4*TU``QUn1T
z$KBNi?!qM6XK8(|-2?j#fW*Hk0ro4f{bu-bX&>3&0PW9;3z`&U47(`!U>N$)v-1ZU
zI!m@g5oHVDAYiTyl@j-u~+6aMZ;?v72i13qEF6Zvf@
zaeHk8SW*QK7>^;KcNTgy
z{)2x0b3*?E{Z#%Ky=)G^#yN2{4Lr^cxn!s`>Axr3{#^8?f8_B=ifIYEqw4TqX~!F*
zt!B3~W?#BLr56D4vO`zsC{Vt40SHe`LjuLc+*g7W6J0AJoCt8K*-XeH4|XN%Mb^iR
z3@fDH;)Cs1jba%8Yd)7$c|?~}smS_>pBCp9s15whm5JEp4LiPO#CmBT*0|7+d^dxE
zIoi!)N3z1QVENNh7wLmvpR=l3$vgO(X_zhYql41EW+mT0$VxH4LNnR71o9U>mHk0=
z*F;$y+uLFpjgXuo;%n_ggNetaQoWVbE%9p?a)S#a*{U
zl|?kOCzT8}03JfS^+D}nxrK(Y%07!fkQO-3k>NIlg(p_9`Tj~p$bO4C=YP$>ZN2u}
zNSs+HBuehYroRYoDaTa5>SkG9$32z0e!j(VDPu$-aCih?B@JZ2lT9+1)uBJu|z6bKvH2?!VmmgWRwF
zjl7@wmkMdq;iWju)U8@}kgCc3r=s1u-CoB&Ml4!!PCH7`8$O;WqGl{JXrrgJ)1qHX
z$qSV*t+)A>F<3pi^}B(i390Vh&ZCYw_@iq6uLBOFw5SHQsP=s?%z93S)L*CcYI|Kc
zWuWI41`VGMe&kAymW^=NyK#5uKFDP!LqokPzsGjDSPk>(TL^Z~X*J#V?G4wIyMxD9
zg&OT9$=c!|SI5)_b`QAo_;&p8cOkM|qQ&puKa0G7ASPCSv(H=mt(CB5{iLDZaFxo;
z0o%RTF-_QBn^z)u1|PgE(o{55|FE4rIHs@M9?&Dro6k;&Pbr2mC0@)sEU|Z9KfAN2
z^S;sL_XYl+!+UPuX9lhU2mO;9X6SzWQx?BBvKUdhIkmWDTUu3(dYybte2N361y7jd
zbh0p-1oKq)W6+?BPH0g7NGU2rZ)@!wtf@L3){leI917f5VF6#tlDy+)T}6bMa^Mg+l3n1N~ho}4Hb#4MZy#-v!crH1Jo$wi;Ow1=6;z@2+
zIlQ&^HZnroaSFGQW@?e@#j=%AQEw$A#bl&aCefe+Lh#{ianxH_lU@g^G7a?*Qo>^p
z*xr}H|JX{PeDS%Ov;+A1aWBa}xYxh1!NVjzO8R^hx4PuN5rcR{f+{DPwXp_M)yBdw
zXU%lwW>Lcw_B&Z)!`hjlQ8VOF0MvjQ%uxFvXvd)|i@4%)OAQq;{b(?keJs;#KhDE;
z+cJW}{N8(W>Pej942%aJT)5S)2^@gJ2ol$FJZ4-z%QtG&eX?ZjD{%e1ok*y{+5Uu}
zP{;%SZvN6O}(s(I7@99P!C=ue|-Em&h%|l2>iwCV33196SptaWDuz80MF+
zx~^gGRGAzEd3<<$s{$yO=%aAdN=+%Rl+#7_DG+_Uwuh0!B>cPP9Y8Z-ht%7HE?w$cES%3%l}5%?0r{9+
zr&*Kl3$2k4x7nJINHJdE_Pe>0D|=+Gfd(ZGz=RjQtpJ~xhb^UT=h9cqzZrKI3XpH8
zlut-`Be!Km9wAr%DjEC9s`ZL$Cv+Ou0u3_IKF~aziC*5#uu&F&AWf>yclyy9N;C}(
z%C$vgT7Tcq$f@Uyosp3p_H|uaGPLy5DI8g4TCY}e+!36yR9wgMP|-@l?U_cSgih
zoZF05Uuu+wDwgX~y=O=$o{yRtltl!rz?NR;sihe*^#*S?E2u_|>;Q7#iCsSS-mne$
zSn(nCv`y}}osyXMVJ{nDRdPEo?e}*Ak@YA|PHDiq=z(i}%it}kxtDxsT>-1BUd{#s
zA=!inM7?y*V(kVDaX$>{tXBa$FSKD?8cNN4_q;#s{tM4&x%DJcga=Om(^y7wJ+Sk@a6fv*uZ
zomuVPK=59ehf;4_Ll9D}(1%DsLN<}y@ts3k_QXJcJeQD*Dul;7{m4b*zxxEZ{y7H5
zI18VJphl4@3P2|w9s-^L_?&*j*v5EZjWH-s
ztqV3y0vuvc@8RMZ3Oq}P;id86Eaa|C(^dgI)F@z(HMv~n?r~q5HnnRm;DUL
z@PB6O!GG$=0&Ie}P8+DJq^1dN~S(jkSaf$jxvRf
zka|dL;kd-b{&}|E4?fgi04X?R4enzoai9bnwx5L*=3Z$)gEqD-QByD;z0Uo1jymKB
z0)8c0W#{P*+0r>!W0mnL(TtID;u6Ioq>lj&3Uh}KgIkI|It%gU6>l;DN_(+;3a}jB
z92%sG1}SW-4^eizk&v(!%{ugp1`Mh(V$iC&75>^*;l~bH`t!f?i2|1
zE!Vn2tBp`QfUT)n5RaDOO9g0<@b;m5NGFx?`phDLS+_hN+~kKJoC5r!pB$y>n{ET!
z#Ht2H%!$Zobhgyqcigsoq3tjZKfqN1ECx-zw=?X{jgssJj#pVQjH&K
z)h6D)0C+2gktOgfize4KU^!qO(hd2vbBxL(Xb>EUZ6CNFJ9|5^&ge}IFwyu737Cn_mJe#$@y}_0Jf<2e|yeV|1D&02?j!
z0a`InF|_E}sb;xRY`dj5k~7jQ6@HpM9%q|F4&*l7*Si{(X3czdCm^Tu#=|Qg@=C=V
z!t3R2EN#qi!!2#kRx!-AKDzug@%7uH(wKu`CHpy)mgtriMwP%6KO@7UHPIZIv+vaa
z({<)))#Nu0**cn(r<3}(L0Vf@ecZI2)vqdLMb@HjC|nO|#mY4)7&`0xWQ2+Kg$uujOJx
z(BmXc8B&b*q|Ri4z|9$TDwSXbu
zPjqugC;nN@{=j|RiP^-DVM!zI5R@bdtltSZXO44J+y3v~c4$vorun0=0ANcO23}qh
zV%7uCbfSgswAnyz0P>0xk!~tTJgvN^fRY4ZOL2W#KyY2KfgY|V9-hmcN8q+;1DV=4
zEfXMAAADGkZ>Q15o#H+qU_m;9KlOVUfP>-FmlJoIU{~~2_uC0t_rX`rH=>{`@Fk$S
z<1xw=)_$%7JR|~HigYoah4eNmWXsIgvG1D$I&(^R2gt*CGTCteYDOLQCuk?_7osG1
zVKv2bQTa}KO_p=f;oN=q7YDhVK(
zVL&mp^b*D%ck+#mgW_!uDW9pG+|pXG=h}R6v%n}+Z^@f@FBkRHFv=IldleTs$zt*q
z#ei1;#ZILDZT77(;7XPzU*kQB1Far$#`aHWkpC8|6?l^ZxL70CuUe+6QVwvKY9No1
zE%NIe<7+MVF%OF0IdwcnD3Awy`{!-Kb1Q*8!xf#y}>aJI*Aw@Top9Ao^x8St-J^
z?knAhE{olE7&zv8AKrNz0|}53fM4>`EZk!kJq6wAv|d2S&DFzji~n3h!C(YBJ0|WtEZVnRS`Ofw^wE$@D8dhk3NR!s_fWolP+4rvW#D+Y2$C(+yaD9YEw)p%zB_R7=8;}H;`7b>|Am*MTz;y}^D2tmtQ1e26Lpe^P#q=Ws8vPg~H}I3Cx|Ug>4ch9tZ1k
z&N@B0A;M)#*!q}4C;j4JVlcqLU~51HX%zcABH#`E*l~pqMZLp(>{%kP{m6`c{Lw!?`wQi0q%2~M#LakPdO;6KK}J%
z^@Hyp>#=hKp+8rZ7y&$Hk6r@}>hORvqd})Z(LqmJUJ15l(V
zZ~iJpZ3c?ii`+C`e~o`9y($e@``q+ZM3H*@l>L`fb5BHEwsTP@LW*(&C5a(l
zrVLM^V7{QXoUw(}%q0cZL*Gk$YyviLE+
zT$j&p7rIq_e(dn3ru8K3Bym
zuHA1%N#O(3GjNN4=(mt(4?soQI9~70h}xv!z`cQFUuc%mw!F&qG)Ew^&*VBwKh_RqapALOI|4fyeAQ|w`+Su7lv#61
zOgq`lAw6o+n?~Ou^n0h;JwF!xu!R(Z^8^#zJ^{s+26y`0D3WHCRu|=OV*+J<8b7Y9
zDKyY5-t_*9}W4_(vO1u
zHKErrz4ZTuUUsi7U#uvtuj5Pdz_{PInK@M#XN9?ki8?U;YNU|ZnaOuoax`A?>73-7
zeh@V*MN;*OWC9?*iCSKL%NE)CmE{Z9MDx{_6{V%WeVFnMP2`gGPE1O9e={p-2!=Cz
zx18o9JfQLkIAy)q`1}MF)$4SJDLWqAzxUCn6Gi6OuTWaRVOuI)nfn=t{!ZZ*wfvch
zb&^y~rQ#&dA7!=jj+;MrR^~jh4SPi3%va*zR`cDo9f@*9mDO%#Dm=SkvG+SRbJ*G>
zN8-yW&gZE_b7#~pe5betQ|riw>Kx&X#XZyKaAX&>5xovQN|U
zkL{!JjS%PE=;8aq<;UM(!7y%z8P=5oJh#LNU^@wn$M(s6tfdwb1|hlsN-x(cM~UXQ
zDYNVE3ewd??_=D*d@{Y4cc?)w{!v$O6m`Ub1oI4-v&wy{FaBK_e!IX40mqIQ{BY4vR<2PR!yO6Hi@Mnx
zUjMLG`Qh-JR=yvG3fY7Ch(7?j-{$1<s|&Z^ZviS(`RLnzT4*isTov+K7M!TvVMgsc~SC~0+#HvJZmVpU@}a?KvU
zUF^DNsKRq%vQX=r%X|tPOn+9u9}Li^;(l0aM#K>^&NKv}K}9>GI`b&GSDZdJvM&
zKXg)pvG2u2uVsOLda#Dv8r9+(ZfL5d^aN6upv%VUSckvwF!e-vS_H_trLt~^d_bY|tNa90-wBVA;=?^(@ur_ab
zaqs`ehI5_zey9z6o8S#N!g~OirXKsGZTJoOGW8zC+Pj+B1h+_G)7&2if5?q5w{Ufu
zv=Z)#C!Wnf<@+XAn-cBsJw?_cvIJ1XZ304@vPgjP>zz5n9zfCrqNL^CKhDQCl;i6K
zNxqil{69{6=59ac38y+xNvNo~noB@vw|<>NuUtrRIDBm6SmBmhX3d
zOzK!q>1~}T&%(ahEqlOOk!?*kHOz~5l|!N#8fB$mO}ISWU@~KLn#U6Sy+SLz^?5nx
z?Qy7c%V0P{6)L|;NPg2Z^7)taEdJ)l^nfh3??*{ef~u|qSP;s9tpWUI(rO&2xS)=}
zb*F&dK6af>Za*ytW|j|68y9x~
z^Ua@CaY9)DdF8*zyK~||OP^fW8p<#1=W(FPzoHkl&`pUckKyY5tehI%lm|4o*L7dG
zoaTx5+GNFWfFh7Uz#StRiOdQ8TiY-1i^PT@OJN%+N8)3B_D8@Z;FQEUV1e-{26do<
zx)glU;5}mlyQo6g7%*)}4J}+j-UckYhT_8@JR$OA*Oico_DceQ+5dkQk0JjeL%?xH
zS+?bsL)hw3*LU5%MRkXaWUV{pCFJjl)~j9w+qt-LPVB^z%KE5~V>`PITM!H~9KX4Kf+La}*q*xJek&K0#W-p3czHcW{pEMKYz
zIg@JYa<8nM=kal}wS^?v=3K^{p)$p9kl1Ndc(^nuSV$45l~10H(up5_`(gBDVepYE
zP5>EJe@XN%>~6v$WzIdCb`Q`E`ap*%+>5bv
zOJCI`XHAf4?@@20_j_0Lbj3`&u(;PO;)96DeI|VklGsyVT`4nHp@t57PtaKMJ7+YA
z+$!!7-0MxflkKejbDgF#bxUUXTPZcew{{Sa>o(LTJ>u{AX{5a3eG)s2uLyRGw0k;9
zP~6D|?}vPP%qd&kmUD_}kkAP(3RdVmmAj`yMTU;_En|>+ZM;da*DP_R64-a8f$0cV
z_!4l<1Yfr2m#3&}YOsC^l$8XRHV~+p
zkNVs$-n#p6%PDy3wo`Y)bBrWuwaUKjEKJs_p5>fi5${g^4{zHBhT;>h_y_OQ--y|D
z)bXhiDWmQ%iCj6uz_UW9?{>rMGjYAWm*6Q1b`L$P{a;>IYSMo$E=Q-hwK;{G
zqllC9cEoBeU4M~0QkQ`_moZk4AM@CC-Cm!0uI25y8^(XABb}vFJ$1j;u9VgMmiE01
zPQbnR+p`%uO9BGoJiXg)askz^s?ImG5N;Z~Iywb=r_id>aoKg=E0XhV
z+_Mg*ONy@pQcMZ)az6l9Mp#umO0h9RzOtWdB|w=Nz9+;jC&f^ht6d*xV5-;<8^%-q
z+|@!#vJhc&<>M$_;`0P!-qWj(oxW$Otoo$nA_wi20or6B$Yi
zX)LeF)YpXCy6dCG>DGmYy8A(s?YKiFSeyaxLE9!h!F?Q_ggIO(T#4Y&OEzWCuY9E1
z!~m|=h9y8M;g4n~TjX-Mv<59Hb%VWjj~;}#c^Jh`Jk8rzUftezaSNU86h(uI4|KVd
zho|k(Ap4%}z1M_Gb%%sGsmAjBsB(UUEtPcWwJ#daoSMafYc4}$@xo1{V|%AD30f*8
z#mkx-=Tu&w%E-+!JFq{lz-}+{ux+J<)CMW}uYL;j
ze-NIKvYs2SDYR|NwYXxp$~PpGdo!d^{#0SG^TFc|(pQIPY2OrHEzEVN-#i>p*ELCS
z4Gtwk6f*=L(n}k3F0TZBR5|~NLFIDYT>-Or-jcPBI~`pWfhB(OlL>NW9!VWBj0_yH
zOa4QA%tge*iuay16e@rsq$Q}{FGTiCiE0}9nl6|<=;F>@5fysx
zZ`{N35XNXYr*-e*xrQf)r0y{hH*Qq;5>HS8VrwkIDAOSLuaG$Ll;L8!Vf#$cG
zSnpPrdYnD|yxr+lS%afI!uoAW(ok#CBDtPVaZXX`)wd(MW_UbB0l1j2J0{d1n+3`J
zyr_!!n%5G2h?A)}}_VAqL
zOG<@O#SRVb5dT-z^7aiCV%*pA--QmEnce2co6s4ZxnQ__EdYA;%3yZun}t$}46mz+
zHq68B10o+%`{^!!G&e1Z+>1T8uh|N@_yQ|%+ORTo^=hzNF1PwSdNR3Ud%}_DrDbKo
z;&J-k6!d0hJfZ1hSAC5HX>V!U-@Mi7oMqEc<$t3vXyM5v_i;@}72_8KTN-^+3uZKO
zpN#l7Bu$#h+cSm3XTlM+xyBmso*nKpR)eYaeX(XXmy!sgqg_8ohr``3pNW2NvPDwt
zMelL3np#P`MgPm1d10wn*`qIWcb-=ex}OaWP1{PB34DW}`rOL(ntbR2t^QksIam2c
z(fb~&tonH|;{;7AF_Y#4Q@#wCx?z28@&l`meffwPM-@%skOe5zmwxUl;aN7mqbzuIgJeyZc#rR^IH+^Xy<{
zd6Qt0XF`0O@Z3EbRLv5tT~e0OVhz!T*xRJHskx~Z_A~9K_ZGM`?pcV*Iu%Xdm-Vd9
zdw0kCQj4TU`g=)S|4n}9zP_u`u5gRuV!t!KFc(r2jf5&fc0uQmtD}^Y{>nu`f^W9W
zu0Oa5Ty*9R5)|L=+uKIqdjUTua2avAvm|wr(XH@E!ss2abh&v?G#6f1D!9^DVLmXE
z7gKs0XQY~EMbmEkm4IrrkiGMfVl3lP7$5tL@54~`87_aXfInskOCoyR+ttP@!ngBi
zd51T3V%;-RQua
z(S6$;Ar~c)Bc9cii0Rd`5}`rjVW05`l@J^&~GaPx_Hbo67J?P>O1V#@@PXmVfnXLzh@30}pp}rLy*!
zV1jda+iy#c;5c8P+|YU^r?}^8LkOAmEon-r-7{rPlEIk==G>oM$?BH|-{xhypQkgm
zsb*2i_fZhySkB35y)muS8DBzHJKShJHzOJxZdA70w`tJmxPHC+f)#pJlaFjJo<63$nV}9VfjQeE7*K+Uvv-jxyTv`Z6DutMHS_LT4*)(7
zh}xY<8$u?!jSg+u51~P!vjxdrZ~Hk!^5y^;MatsZ_weVQSfGTS~@%V0UpDMEbqI?T0uvekC-Z>=^L>Xf4!29~cqByT(Y
zq9oMcj_1LHp<<>YROPTeY^gZd7=NjBuxK#qZBDAJS*Fz*t@c?0Ke?HfRf4p1+Q?%k
z6uOkYAJ?r{w80^M@pJvF?dTF2npeV;#+<@Zn93;D(`}}kW6YrSBevD`^G0dH!
zH0AO0Rcqd+f8HAj->HD5`s>3CLsdQsyF_|lU)Q;sZ^~S;+0YsAB}f}A)!mhDot`hh
zaY5BqD?jua?zILSETl5-jFCTcYEkLs;bwc14xBZ1EeSobVY;;R4sR{j$`r1YWb56&
zaQ%7@nDyt_Sl3k%h1^LTIjX(->uXJ2TL^`K=aJijIcmu&N&Yz$W}7o*yVeb$Pi
zjkIf)*I3}A9iE1^Ybkx+?uQ;G?iJGI*Am^m3oPmP+aU#=2%$8qd_867CE|>FyKs3o
z+B35}c%+E^VOemLRccO=o4O%$m7)WCK!m0Q-TQg`MTzFdzTC8`5#Xv7GE=sa_2G@Bxa(Tvky2ub1AMz7FEBot1h4GHFs$2DXCK*~kt?W)IP6!*_glTO
zmH=_qrD0*=z)@Dw`r!$uK(g9xl(ihK8P
zgdN&>#)|LG4|2W@xW&my_D*@uRmjp_<3KCqm!CV(qDu>u&U?!3GFD73z~kYo{K@vH
zYEBf{p}bT6{r&;b>xm;sYs}R5pLB|1S;S=bHIr0GF>Y90hWV;|f(3Bz-T;q9Zh$e?tBq@f}(Iuj_=7X^Hly5s(+p5?^%P*jCmRabBux~qgof4$b
zf?Fs=B5<|$>F;}R>Hh`6?4L`eV=btLGqv+n9Z+PPf9@9{nv-?MBQ7yPGSp=ah=WAm
zpw^a-=jmry_F#HH-~H6YPcQfx4}S#<-i*RW!LLBq*d|}FP2Q(xnTzWqOFSMjK9c_R
zZ0ZEr{Z4cA1DRe#wouNRks7)${yQW=R=zl#$D8oSSY#VX+@oiJj1x)oGxW
zu|eJ5f8+B^H{Vf+ifaEkc@r}l_A6&ApSX&$QcZ6m+RPWl`TD%2#(~AhFAKsJ?Xi>9
zy!^U%TeCwSymOOTs-vsS4|NK&W_C_|HksQWyWp(-2*KrF8~3KdXPCMqT~yy%v^C2s
ztCWcEKHZefz1H~cX@|Jpb%D?--E4$RKi`V1T-gzmqs$``4)<;uO2iki_@r>J{^-o5
zLxY_`NQVpTiEvopoZ>69+PxA_nsx@%XRq|91o1dLL@x*taizK5Qa+G|&V8eP$%-EP
zONB=_Wkxk=LUn9K-jRC0iDucEjBwL7?pIr0cHP#F(npw=S9Q9a$x^|!K0mr(SEpXG
z)x%tnr%@I5Vtp99qs8e#o7EzWoZ~JZ^sM#zLX5VmO@xOP_2sRLLZFZ`kx<9WJn?G4
zkLzrFfsUhS5(1>}4YGU`viCMYgYepmCysK+Q98l9epV4`!UTIp81F?1wnh7$WEBJT
zzdq}d?2~(A?XEAI9~)O*G30iUEZZ(55#lOwH0;z>l`_!~HG_Z}(_SLSw?Mn+C9c{C~co_0b@-7UY
zazWJ)p;$@J(I?8Ex^J|m-orN|bBZS5=DnLd9G^fEyts}kl1lR{$U78WbFVuM&IZ@=aGWN0S%Rvl2
z@25;&Nywf)?F!$DoBa}enxde5s8gEs{{Kk)vcWV>8}1~=5d!8e-E-_M_awh~;M929
zJf$IeRxl;ZDg)`cd{oqc)FbOPJ!IPJ&*CD*$7YM*yF)YZ$SNv!jOl3qBfIa
z}jn8N2D`}RE!ULsAp>!5wg8WKy+ofo8nIv^-PC^%xXYh
zjg_-Y*3tS*bldCMdwG0O)PzA2D!LkiGdI}_*I&nzY^U`<+27Ksj;se0@+%^#7yFhC
zKk2Jz=~^_IgH8!Dt;6VT%GMLZhCb3W_Ed?b&lk=g76;+qIRB|&EqH1c+kLf~S7=EI
z^8Xln?`XFFxNn$J+A2Ei*%q~m+M8-?7e(#W+C*#;Gxpw!qN4VW8nO4Rs!ddk*n1>q
zto)w*uJfGd+}Cs8_jO%=d~#0y$oC}QyuY9ETJP#k^wWu3RQ%{<3|Han{~lUJqoPwC
zaoia5D!Y7?smb6a8J+=Dizf4;X6OI6NonQS6H~0smv7v`k(ok15AnVi6>p0Y
zN``)r2UFzch-+XI1F8XyVlA}chXVD((w((t7TLcF1b<4rdLb{&wbxH(@LBqbmv(>x
zgXJ|(5yMyE;e*=mkKO}+Re!H6X@Eqwm~F%h>9FfF6;p7^YgN)DH+?UGsN<4Yeotny-i(&%^aqR|)9>pM6P%l&0@`b3TNvc4
zTU|SK+w$8k)Ufa(6qrp1qp|Vz+#6w_H2tpCKc$0~;Niokt#q=2`v2`iy?^Ag2f)2K
zHL!ERXEyxLNrBS6_ptC%p_F?KNg>ky#T`~tuvdjxpi6+ws>YW#r;EG513nja5M=4|
zolprz$uga`?*a0U=idkDDY_b0CsenI+O3Sd4B*kw?YqjU#k-K$haS*VE8VoZN{&jD
z!8@abupYhMw8(~FHsY6j7{wqH#Vwohx|;NZcCAK
z5Ux?ZtO;MHz@1iKnieruTozsADruVwC#_wimWMD2Rl
z8%VDJLB@!+v@;j-j)ZKzWh)=%u1pizsk{LRIrzlKnP6%BZ&CRV^XtC`*#GOGUipWB
ziocKbi4z;f^Qw@A+|TuenA0$QcE@d7Ztr(1<{gVqtqDjmKc|$zCx^*1w8e(Yx_iAH
z&v&l)bI?-SE4Ode4}<{Nq8R0-lZN%>Qdw8Q@nZ_W&nY=}`5O*nyGXb^#nMjAuAuYJ
z7O0|}H;IqJg_I|!OkA)Az-!B;TgaqV>uPBbzvu`=xA|0p-3|}4yBqPkbYOHfZuSWi
z$U5%kk33JJ1-1ZCuq#CkZ%Fehh1EGa^Tjt`j?wFpC8(}_$9z98%(8+fT*a)wS)&Z}
zbLV`$sv{0zH_D}N>~O!IR@xHN52YwAQ%J031>G1;R^9NHI?kRO=r^X*T3F_4vWq|=
z);bc;mQVH_@UHffO;X?gJoiU{BQ2)SI`R5>%7m(w`6`+f0cM0`k&*s;;J4=)olIo}
zaWT!*?MMBIEP!)R3;ZBA(o;3O*4SuxBXfP|?za=@C!7`CW>~fbWX0v=se^ngrt^|z
zm_4~Kd)-U%%qm!u_;KkP-JhkwD6{v501>OBlqBY%V)
zj@if6UB@<(;zP7?Hk`Ru$mZNTH;NhED6&(|CiKSs)!Siq1BRGi<)tIM$#CCB(rO|Z
zJ5e*^(;F9@MO4d6zZv`8N
z-wR}Zw{}ltZX^0ou|B=(nR5KG!WJ=0ZgSCWV6e*`MwTXKg>{Y_pyI~&uVA*Ran`I-?awIreS|^0eei3Mr~qS=vPuw
z(j+bViY4Lt0E@vuf(i4hbL8Z4S9Hg)WPAcGTk>gPwV%&Cx=Ac!5z=?Q`=%>}kT{`0
zmbV|SE~~p@5Z5OCGPl~%;EJZgn~$@uGk4^#DiM#L*BAlIYmY4CIJ}+q1BSHEOleRB
zD%~y-?LrTWB}>Wsg}iquw{y0qxjTCR=|OEu%eKouo#v_*n+oJ~416}uIbEN4&yn&8
zl3vF)O^@MCw;K1Clh02)rZ!&Sb>5^mS{QbDa()?wO8X3kEE7pk`^kjNvNex)c{QWN
z7*T@#T>TZ9XV$Kt2K6sT7TJcz7IZs2Ew4SJk67fnHIgmS-f}B6iE!t@EI=%ay64~h
zRJjYTrlT09#|
z<)C!&%Z?cGu)OOIg)a+uZ?c7z++G~VGU*ks`wq?HVB8lX5`)+>5P!Mz&Zf3Mri6Gc
zx4Os|NOe7b)zs<}7#VMh1@uFOF}Tnw3$V_7uWIp!mrX6SH6wgo#E&|k4ecaA+I$X-
zTl6DWb4XV+q7JK0!*bPUAJp#N*`eL<*Z%pzZqw!48quD4o+69-7zTAresO$5`CS0V
z2=4ue{*KVaD$$>H-`bAUU
z*KnVkzE#uIMrROcFU}xOTSFRRuK&~k*LLV*8@fX7J*|{K^TDTwDz-TUKEI0sDvGHTB&LHd40atSg$Dv+9QqfzMi}
zoZ)oFs-AQG{WV4p4qO$8*Qyn|3+n;H8E9U-n`0hzDcHMXOdI2`ijf=Z4}39^KLPY?
zwT(djH7n{>J7}U=X#Y6~lcMy+CnXf*zuj}iZ`AKdhubxzQQ2hPBSKO4`E#H*OIA7~
z$9JR_e>Ao{RU3PpY_VZA$fL6EHw*f7rXfad^`U9%FfN3C3h?cF0c9Rjs5)T2)WwCZ
z-=An@E_*e8DPi&zQaqfWGi%D>*AuPy@_=cQtH-)XN0w((fuh)@0Mhrdh7kTmn?^v5
zbMLyTP~9C0$zRn5=&kV6#QQrVRt3mQLFr6(TgxLhXyqTDm+6DOQsz0U%*tjB;Ta#N
z-&XyJc>C@y!9$AB5=Vf#5AXdwh`7gZ(w+d&N32U_x9{gzi)pyPfmU5*ZmT~1?c8U#
z(aoda1=8wCmyb
z-~a954v+i~Vr=3EN><2i2S(+E@QMP%e2p$=+qVQm%N~2Cv%QczbM`D$lP0?3ub$2R
zP&%%V{ZD3?HHnBVK<#e0ss&@-|nqk#^pjW-4
zsZ%du#G8p{Kx=7KnnKAVE-PCHO&N9ALAveBq_2KkS7KV#ixe3;`I5Uqp3~e*Gz<3=
zrQ)N`$XKQ{fLIKA44+l8_TgS)XoJqmPFa7#!~fJ;be}h^UrQZ+Eb&&_4Em-GNe-lBA7+6;Uu9FQGFAoe;1D}QS5r^gZ8NsA`<
z5RgGdUVv*yx(vTSL?EY2B=iN^PoaTMpdXPalA8ClSo72JhC7K5QF;Xuk%1xVpOt%>
ze%&+ffN?Mm(;20~NiqlVW(p?VS!Vr8BR@M=TAY)+fOABxQ{Lbqo!_a77)V$L8=mfr
z&Qqv#xLS!HZr|+!E-QCF^S^C96_1ywQXDPs^H_b5eZk9Tzs@r$g2H`DKmX*C{F5+WX*+
z_~ipX+|vVL!zq8Rr6=L+0%c!kp4h_-u0urR&AU9HaF(Lwqer`eg7E2j$h};0RMp{i
zl|G*~19v|0mLT^KU-y8l!kF>-Z!XOdlOIcsow~ez2#;MBD#WWQs}p|ySH&^xzZf%<
zf`q_K(6bFO2$`r#2lb8;^0%z?K$dBu+r#9xFAJA(Z-vXc@2U)Fk`iFD&Re)ajTy_*
z+ZktN>w%mTZDyjl1uKaMyj1nv0r@!!FH{bNAYjc^n3NTappr|D30o{ch()P0
zyn1B1YcQd11H9W8Xr!3R>G0|`!A>hFvVAj#VFEwTZMkvU=DHl$Y?^bUp^aq%y{K9v
zpWHdxkE#LJ(=0lr8iT1PRu0$AJD-*(Zp@ZZtk^{DiBol;fd*pHR{RO-)t#A$RnQiD
za1)yJgVkiaZPTsGN^ZoBLb<60O3`Q2bnW1Azt0P0F#_#og~2zZba@T)0Y}*Rn-FfU
zfxB6aQ$|e`NiJuq$f_b}#Nu&0wUF2Bg
z;zjd?V|PRcnh7y+ul&YHIjhx97ll96PSkIE-bx{*0V=dkZc4AIAkZ`CoJn7wzz02`
zl-Vo93Vydp_iy~t|6ma6>P4vMyg0v?;hEC49sAun?U_Nsj>QAf$7m>Gv9e&w|H~JV
z46(X_olR#7wX$SY;>UxW39`KN_C>=Lfa;ynqgt8jK4c(#6+-Et4M0(J!Uc#)NA2NU
zpZy$y2lPUjDn5&o{tf-8u#))5qJ>=O<7GHc{_+
z>IV4t&;MHPpvL-{p%3E&D1NesESaR7i#;*DJaC}3;g>jF_VvS0XjJn}DgP!y{kIuk
z)EnlHv0jM`*gD6R0a(J@f67ZUW};
zo6D&*P)?q-f0gkq*3YIz-HL!{!`dp&*HxLMS&IT|(Pyk21XssbCJK2zYY>FoHlW=e
zadFw%%*|j6AvoRF@ZF%Q>ilNm!uF?w7HndI#+6l!xY_V0=W9|K?FcQ!7CfbF>kfWK
zH0FOYrgn{|$W#9(J>sUqsVk9|FekGQyKPwvZUK~mn
zsz1%YmAvm28?WHT^gh03kY1j9@WTPoY%nxtusiEU?j_dCha=+I#Oc)ClgkO*#!anY
z{G78NOwo6Qs^Ad0DF1$TR}uh`pT*G~yF_)|>6pH8v07C(qXIN^+FtXG1a*kPUaJ}y
zJe2jdYt(cX78Qs9fpB-fZ!giAk?AMm-FMR5UThxc!3;^_l9uI~n`^QWS|ttIZzqf(
z#tY2ZvsaUYNvIvDB*q}_=6R)~9DSq)e2U+wM6ol$_M`X4m?nh;5oaiLhHosQ?aOj5
z<8IbgnCEqX)dvLYNJ~wMSM*wHYSN!KyIR$zRzU!SeE|?p^*=&E1n@Bhn?71`BL5ID
zf>A5b5*yIUFDE!Rf4&&PZE;|Ipz{8!jgYPCB5h1!@1hcfZVnqFOLXl!sZQ0DxO0Zud#W0t2wcGWk?#zn{vu3-=tih%tzQodST59DV)M5my>*+sn<`Cr>)LHheL|
zENRSx!7}))u)4+0@L7$~`jkU}i<}%O)Z)l_{zB7twr=9xe8v>I_4e)I1+JlHJ@5s(
zB+5kwcz0wh(h@_F;KUZOwB)x!CFb$a+3v08;Y|=&Ze~oN7eYfBGKuxydFB{taIMlv
z``Bu@YhCQ1Gs46CT2W;G=oYWi`K5k!UFmbwZ*dm|u6sXap&8EaTtAPl;Dyp*~jY!ktN$^34`2zo^2HB@bpUp#CffBe(?
zScV1P^$GPDP8kkChl_^;Q};teO!7*VGi`7-!XiskR1uC@_Y+9Kv?)uTOv*5s|o$(Hi#=I(RwA^8*eW4^tNXi@JoBPY41Yz5rXM{~uP1WcSzQ_JNIzpGx)uWff
zVOSsKZrN;^-@>Ad2B@^PVyHJZZdNx@y~!PkR$P+$w`;<$@oDHua$yFI2=B-|hYrTc
zFO#R)dJXll(%Pz$oMr6Cs%N4F8l8J5Hwt_v|CV1*jVQDFK1fNPH&AK+aM0tx#OwDS
z>i7}sAw>5LGhIo{=aLu#a1o5ma4HXzm}oO0`ZDb_Kx*h^$_$6KQE_qt8Sq)s9n2AS
z8b=Xa&-w%arHfFt&}=Y-Ri-Gt`l2fQty?DTE;tWx>rGm6ws27TUx{rh<>?{6QelwU
zFw_+x%t8fgv63mmOExUwe0rdyZof|3kdabZ+ONQF6Sc+exvfD~opHl@OtA#I;ltVG
zYnzsYwJFHpm^uS&J^iX!Rsklh;bs+_X`?sZzt`k0VJ5v=K1JBr4;bphv&4R-_c<0g
zBRO@G#C{Sa4Ge{74Ol)k#-|jZ4rO&>jyt1Rh|tsWmeXug-isEFXpTOpf3DQ8E%3np
z!)q&KqnC#82Q+1vz*KL#Epqb`aqp4JF-;Ecy}YEXaBfe=T<7ps$z=la@4+^VwhND{
z$2neQgt5Gx=!*`p{o`&dPH25oNQ%3H?Uv<#)HZim{p*?C$;4M3|1w8}n{Vn`)?7bf
zu6St4>}#9^v-qRe8bAvyL;nrESZaal3nw>FiSQq5n&UX?zk}@DY}2=EI?xOr2X7$tTbRc&v4OC-AtX
ztBA^XC(WW)cu2^`7V~$;Yi$2kS9L0{;aYK^K$wg1JZepE;h2TOZIJl{5ldLD=!Sp_
zPoMGW&1#_g`$rS0r%Y5!1Ik4||MsqV%=#@T;3`lr3HKbMcB7a6TlRqwP=A~&^jh(b
zkGZqlRAaH*0IL1y?M(G+-rihZ?HxEdYo1PHxZAs*KqV>~N|!91k}uQ3rJo%16@E{5X}0
z;y-|8*)%rA*oOack6I9nAJlX5lp839Ny$^07&*xCP6JQD`9Pjsy)-M=;+>gK8J4sm
z9tj?k73!D=hjaS^{Qja|6ro_uKufA-v(D}PSjLd8=0T>lq8kTv6n!2w;
zvAzztxRK{?N8dH#ZcLg`f~cg`&wigWtZ1SS1zbAQI=0-df9kR&%FQOQeyq0a{mFm=
zDl?t$=QpCNAH~JX*_=Jl+?qtAmxD#XGZTxO{i^aV8r)K`-jwEMd-KllCZS*=lL`
zS~R4_tNG~E!3nOx@>H}xES2P8kvg{#K{qkcsDxzxl^91=LQl-rjrc0#(Id+GhG;%$
zHaj;Td^)vE_=zN=VDp=OE$z^ymIpx5rqm{FMIWR+4T~H`tewB5&UDUU_RjCg*-=lG
zzg+xS9icvGM{c;5$@A0Z?XL#kw>w@;%Sf(NsY!pconD^sQmV@WeZ7nZbU(3jSokE)
zmOyH}d(ig25yzgYUK4EB7_w;F-1g+A)Z(im0drr1Z`?z#5m|8yLPi~CgSeh(WJyVYU_lw$MvgKz6rN@YH%OvakZ{5_F;PGHe|
z;)N%h+XjKg`@VRb6stMgn+!I`+&n->Z7qF@X08!iAnzXHoez=nh&eHP=|YjaUo=_m
zJUf`OSP0T>I|Si_MwgB({TtsBcA2IgpKWHDUkH?(;jC}7p%^^-hF_-F7d>id
zTx96Mu5T3EAMM<_Hxenjr%VDBkB{^?ezPBXel>vl%g;F7$fHB1v^$cDs(yZ}A!5f}
zb`gNsmjgwsioq48E#BGM==jm>5;}9kL-QTxrn^Dlu7ym3vu#)D30}p{=X3jB_4u$}
zuo&edeE#*5is9ITRlqmnbH
ztB`wZ%`uGq^TC2@*LhLZ!7PsT<{PYW=N6JBD-?5LPa_|>^n6C-R(b?C2z;TT#AuNG
z{oO0Ohg1!kjL)FH2!H6qFz{2{lcV~@L~1gv1J;A5(lm>Wfg{cHjV{A+p82~Ai}Lux
z_E5s;`5wOGGS2=ii>EjZ?8VIT`xG|ic1O)%$~`m@Q8nc_`seE*j7raMFVCiAVe#kh
z?x!lsuyL)^YJoT=i-vEoIBgfepov-Umb*15!_Q7GX=jD$Iwx
zWG!RX>&NJZpQDdabCvp6{aHiI%NZNjO5+1Bn%3CZnNH#?YyI_B*(z@YG1OPcZ%&dS
z2&?BWS3qF`asK6+ZbQFLOW4=&`%&$StP@#^n3G(>d4I70qY`vp+^)7_#3K7j47ACJ
zf>Kk3$!$tBboIW>efhosFMn&46komfk4#K_rpsA?BwICh{Ng8{u3fFRsX*M9h~brb
zx9vs}J{DHa5kElUH>9=mz4c?2i>(sL?m_fBtXrFP4VYn7Z*p=1^)b3Ibr{5c?{{US
z_ey9AiC{3)-ngN&dhd)BKBkl3Hmr&+&RyFxIeG*T@ZejR)m66Kldk@|ro@v?@XU@4
zB)NsDJg_rN)W&M$%SRR3#=|A>QGU|3J4|u(2}|yJ_s>T7V>j@Tu^HO)7M*BW-y-Y!SNf#=CYSIk%1`jx