From 7dfaf22b9f445ee65dbbebb4ad93911f7873eb8c Mon Sep 17 00:00:00 2001 From: Shilong Zhang <61961338+jshilong@users.noreply.github.com> Date: Wed, 31 Aug 2022 18:39:39 +0800 Subject: [PATCH] [Refactor] Refactor the doc structure (#1786) * fix structure * add version for m2r * read docs * add log * api.rst * fix api.rst * fix the doc --- .readthedocs.yml | 1 - docs/en/_static/image/mmdet3d-logo.png | Bin 0 -> 32796 bytes docs/en/advanced_guides/index.rst | 16 ++- docs/en/api.rst | 144 ++++++++++++++++------ docs/en/index.rst | 4 +- docs/en/notes/changelog.md | 2 +- docs/en/notes/compatibility.md | 2 + docs/en/notes/index.rst | 2 +- docs/en/user_guides/1_exist_data_model.md | 2 +- docs/en/user_guides/2_new_data_model.md | 104 ---------------- docs/en/user_guides/backends_support.md | 2 +- docs/en/user_guides/config.md | 2 +- docs/en/user_guides/coord_sys_tutorial.md | 2 +- docs/en/user_guides/data_pipeline.md | 2 +- docs/en/user_guides/index.rst | 1 - docs/en/user_guides/model_deployment.md | 2 +- docs/mv.py | 0 docs/zh_cn/_static/image/mmdet3d-logo.png | Bin 0 -> 32796 bytes docs/zh_cn/advanced_guides/index.rst | 16 ++- docs/zh_cn/api.rst | 144 ++++++++++++++++------ requirements/docs.txt | 2 +- 21 files changed, 247 insertions(+), 203 deletions(-) create mode 100644 docs/en/_static/image/mmdet3d-logo.png delete mode 100644 docs/en/user_guides/2_new_data_model.md delete mode 100644 docs/mv.py create mode 100644 docs/zh_cn/_static/image/mmdet3d-logo.png diff --git a/.readthedocs.yml b/.readthedocs.yml index 49178bb133..6cfbf5d310 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -6,5 +6,4 @@ python: version: 3.7 install: - requirements: requirements/docs.txt - - requirements: requirements/runtime.txt - requirements: requirements/readthedocs.txt diff --git a/docs/en/_static/image/mmdet3d-logo.png b/docs/en/_static/image/mmdet3d-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f4076bd16294e416de04742174aba2fc2374a45f GIT binary patch literal 32796 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 literal 0 HcmV?d00001 diff --git a/docs/en/advanced_guides/index.rst b/docs/en/advanced_guides/index.rst index 9b6514961d..1faa4c57b3 100644 --- a/docs/en/advanced_guides/index.rst +++ b/docs/en/advanced_guides/index.rst @@ -1,18 +1,26 @@ +Datasets +************** + .. toctree:: :maxdepth: 1 - :caption: Datasets datasets/index.rst + +Supported Tasks +************** + .. toctree:: - :maxdepth: 1 - :caption: Supported Tasks + :maxdepth: 2 supported_tasks/index.rst +Customization +************** + .. toctree:: - :maxdepth: 1 + :maxdepth: 2 customize_dataset.md customize_models.md diff --git a/docs/en/api.rst b/docs/en/api.rst index 00153b9151..74b14c54f9 100644 --- a/docs/en/api.rst +++ b/docs/en/api.rst @@ -1,73 +1,76 @@ -mmdet3d.core +mmdet3d.apis -------------- +.. automodule:: mmdet3d.apis + :members: -anchor +mmdet3d.datasets +-------------- + +datasets ^^^^^^^^^^ -.. automodule:: mmdet3d.core.anchor +.. automodule:: mmdet3d.datasets :members: -bbox -^^^^^^^^^^ -.. automodule:: mmdet3d.core.bbox + +transforms +^^^^^^^^^^^^ +.. automodule:: mmdet3d.datasets.transforms :members: -evaluation +mmdet3d.engine +-------------- + +schedulers ^^^^^^^^^^ -.. automodule:: mmdet3d.core.evaluation +.. automodule:: mmdet3d.engine.schedulers :members: -visualizer -^^^^^^^^^^^^^^^ -.. automodule:: mmdet3d.core.visualizer - :members: +mmdet3d.evaluation +-------------- -voxel -^^^^^^^^^^^^^^^ -.. automodule:: mmdet3d.core.voxel +functional +^^^^^^^^^^ +.. automodule:: mmdet3d.engine.functional :members: -post_processing -^^^^^^^^^^^^^^^ -.. automodule:: mmdet3d.core.post_processing +metrics +^^^^^^^^^^ +.. automodule:: mmdet3d.engine.metrics :members: -mmdet3d.datasets ----------------- - -.. automodule:: mmdet3d.datasets - :members: mmdet3d.models -------------- -detectors -^^^^^^^^^^ -.. automodule:: mmdet3d.models.detectors - :members: - backbones ^^^^^^^^^^ .. automodule:: mmdet3d.models.backbones :members: -necks +data_preprocessors ^^^^^^^^^^ -.. automodule:: mmdet3d.models.necks +.. automodule:: mmdet3d.models.data_preprocessors :members: +decode_heads +^^^^^^^^^^^^ +.. automodule:: mmdet3d.models.decode_heads + :members: + + dense_heads ^^^^^^^^^^^^ .. automodule:: mmdet3d.models.dense_heads :members: -roi_heads +detectors ^^^^^^^^^^ -.. automodule:: mmdet3d.models.roi_heads +.. automodule:: mmdet3d.models.detectors :members: -fusion_layers -^^^^^^^^^^^^^ -.. automodule:: mmdet3d.models.fusion_layers +layers +^^^^^^^^^^ +.. automodule:: mmdet3d.models.layers :members: losses @@ -76,11 +79,74 @@ losses :members: middle_encoders -^^^^^^^^^^^^^^^ +^^^^^^^^^^^^ .. automodule:: mmdet3d.models.middle_encoders :members: -model_utils -^^^^^^^^^^^^^ -.. automodule:: mmdet3d.models.model_utils +necks +^^^^^^^^^^^^ +.. automodule:: mmdet3d.models.necks + :members: + +roi_heads +^^^^^^^^^^ +.. automodule:: mmdet3d.models.roi_heads + :members: + +segmentors +^^^^^^^^^^ +.. automodule:: mmdet3d.models.segmentors + :members: + +task_modules +^^^^^^^^^^ +.. automodule:: mmdet3d.models.task_modules + :members: + +test_time_augs +^^^^^^^^^^ +.. automodule:: mmdet3d.models.test_time_augs + :members: + +utils +^^^^^^^^^^ +.. automodule:: mmdet3d.models.utils + :members: + +voxel_encoders +^^^^^^^^^^ +.. automodule:: mmdet3d.models.voxel_encoders + :members: + +mmdet3d.structures +-------------- + +structures +^^^^^^^^^^ +.. automodule:: mmdet3d.structures + :members: + +bbox_3d +^^^^^^^^^^ +.. automodule:: mmdet3d.structures.bbox_3d + :members: + +ops +^^^^^^^^^^ +.. automodule:: mmdet3d.structures.ops + :members: + +points +^^^^^^^^^^ +.. automodule:: mmdet3d.structures.points + :members: + +mmdet3d.utils +-------------- +.. automodule::mmdet3d.utils + :members: + +mmdet3d.visulization +-------------- +.. automodule::mmdet3d.visulization :members: diff --git a/docs/en/index.rst b/docs/en/index.rst index 24ee00ee76..24017966c2 100644 --- a/docs/en/index.rst +++ b/docs/en/index.rst @@ -9,7 +9,7 @@ Welcome to MMDetection3D's documentation! getting_started.md .. toctree:: - :maxdepth: 2 + :maxdepth: 3 :caption: User Guides user_guides/index.rst @@ -40,7 +40,7 @@ Welcome to MMDetection3D's documentation! .. toctree:: - :maxdepth: 2 + :maxdepth: 1 :caption: Notes notes/index.rst diff --git a/docs/en/notes/changelog.md b/docs/en/notes/changelog.md index 748aa94d44..3ee06c004a 100644 --- a/docs/en/notes/changelog.md +++ b/docs/en/notes/changelog.md @@ -1,4 +1,4 @@ -## Changelog +# Changelog ### v1.0.0rc3 (8/6/2022) diff --git a/docs/en/notes/compatibility.md b/docs/en/notes/compatibility.md index b5376dffd1..385778355f 100644 --- a/docs/en/notes/compatibility.md +++ b/docs/en/notes/compatibility.md @@ -1,3 +1,5 @@ +# Compatibility + ## v1.0.0rc1 ### Operators Migration diff --git a/docs/en/notes/index.rst b/docs/en/notes/index.rst index f3063056c5..d43ae735c6 100644 --- a/docs/en/notes/index.rst +++ b/docs/en/notes/index.rst @@ -1,5 +1,5 @@ .. toctree:: - :maxdepth: 3 + :maxdepth: 1 benchmarks.md changelog.md diff --git a/docs/en/user_guides/1_exist_data_model.md b/docs/en/user_guides/1_exist_data_model.md index 8696dba6e2..810dc4bdc2 100644 --- a/docs/en/user_guides/1_exist_data_model.md +++ b/docs/en/user_guides/1_exist_data_model.md @@ -1,4 +1,4 @@ -# 1: Inference and train with existing models and standard datasets +# Inference and train ## Inference with existing models diff --git a/docs/en/user_guides/2_new_data_model.md b/docs/en/user_guides/2_new_data_model.md deleted file mode 100644 index 309fc6b64c..0000000000 --- a/docs/en/user_guides/2_new_data_model.md +++ /dev/null @@ -1,104 +0,0 @@ -# 2: Train with customized datasets - -In this note, you will know how to train and test predefined models with customized datasets. We use the Waymo dataset as an example to describe the whole process. - -The basic steps are as below: - -1. Prepare the customized dataset -2. Prepare a config -3. Train, test, inference models on the customized dataset. - -## Prepare the customized dataset - -There are three ways to support a new dataset in MMDetection3D: - -1. reorganize the dataset into existing format. -2. reorganize the dataset into a middle format. -3. implement a new dataset. - -Usually we recommend to use the first two methods which are usually easier than the third. - -In this note, we give an example for converting the data into KITTI format. - -**Note**: We take Waymo as the example here considering its format is totally different from other existing formats. For other datasets using similar methods to organize data, like Lyft compared to nuScenes, it would be easier to directly implement the new data converter (for the second approach above) instead of converting it to another format (for the first approach above). - -### KITTI dataset format - -Firstly, the raw data for 3D object detection from KITTI are typically organized as follows, where `ImageSets` contains split files indicating which files belong to training/validation/testing set, `calib` contains calibration information files, `image_2` and `velodyne` include image data and point cloud data, and `label_2` includes label files for 3D detection. - -``` -mmdetection3d -├── mmdet3d -├── tools -├── configs -├── data -│ ├── kitti -│ │ ├── ImageSets -│ │ ├── testing -│ │ │ ├── calib -│ │ │ ├── image_2 -│ │ │ ├── velodyne -│ │ ├── training -│ │ │ ├── calib -│ │ │ ├── image_2 -│ │ │ ├── label_2 -│ │ │ ├── velodyne -``` - -Specific annotation format is described in the official object development [kit](https://s3.eu-central-1.amazonaws.com/avg-kitti/devkit_object.zip). For example, it consists of the following labels: - -``` -#Values Name Description ----------------------------------------------------------------------------- - 1 type Describes the type of object: 'Car', 'Van', 'Truck', - 'Pedestrian', 'Person_sitting', 'Cyclist', 'Tram', - 'Misc' or 'DontCare' - 1 truncated Float from 0 (non-truncated) to 1 (truncated), where - truncated refers to the object leaving image boundaries - 1 occluded Integer (0,1,2,3) indicating occlusion state: - 0 = fully visible, 1 = partly occluded - 2 = largely occluded, 3 = unknown - 1 alpha Observation angle of object, ranging [-pi..pi] - 4 bbox 2D bounding box of object in the image (0-based index): - contains left, top, right, bottom pixel coordinates - 3 dimensions 3D object dimensions: height, width, length (in meters) - 3 location 3D object location x,y,z in camera coordinates (in meters) - 1 rotation_y Rotation ry around Y-axis in camera coordinates [-pi..pi] - 1 score Only for results: Float, indicating confidence in - detection, needed for p/r curves, higher is better. -``` - -Assume we use the Waymo dataset. -After downloading the data, we need to implement a function to convert both the input data and annotation format into the KITTI style. Then we can implement WaymoDataset inherited from KittiDataset to load the data and perform training and evaluation. - -Specifically, we implement a waymo [converter](https://github.com/open-mmlab/mmdetection3d/blob/master/tools/dataset_converters/waymo_converter.py) to convert Waymo data into KITTI format and a waymo dataset [class](https://github.com/open-mmlab/mmdetection3d/blob/master/mmdet3d/datasets/waymo_dataset.py) to process it. Because we preprocess the raw data and reorganize it like KITTI, the dataset class could be implemented more easily by inheriting from KittiDataset. The last thing needed to be noted is the evaluation protocol you would like to use. Because Waymo has its own evaluation approach, we further incorporate it into our dataset class. Afterwards, users can successfully convert the data format and use `WaymoDataset` to train and evaluate the model. - -For more details about the intermediate results of preprocessing of Waymo dataset, please refer to its [tutorial](https://mmdetection3d.readthedocs.io/en/latest/datasets/waymo_det.html). - -## Prepare a config - -The second step is to prepare configs such that the dataset could be successfully loaded. In addition, adjusting hyperparameters is usually necessary to obtain decent performance in 3D detection. - -Suppose we would like to train PointPillars on Waymo to achieve 3D detection for 3 classes, vehicle, cyclist and pedestrian, we need to prepare dataset config like [this](https://github.com/open-mmlab/mmdetection3d/blob/master/configs/_base_/datasets/waymoD5-3d-3class.py), model config like [this](https://github.com/open-mmlab/mmdetection3d/blob/master/configs/_base_/models/hv_pointpillars_secfpn_waymo.py) and combine them like [this](https://github.com/open-mmlab/mmdetection3d/blob/master/configs/pointpillars/hv_pointpillars_secfpn_sbn_2x16_2x_waymoD5-3d-3class.py), compared to KITTI [dataset config](https://github.com/open-mmlab/mmdetection3d/blob/master/configs/_base_/datasets/kitti-3d-3class.py), [model config](https://github.com/open-mmlab/mmdetection3d/blob/master/configs/_base_/models/hv_pointpillars_secfpn_kitti.py) and [overall](https://github.com/open-mmlab/mmdetection3d/blob/master/configs/pointpillars/hv_pointpillars_secfpn_6x8_160e_kitti-3d-3class.py). - -## Train a new model - -To train a model with the new config, you can simply run - -```shell -python tools/train.py configs/pointpillars/hv_pointpillars_secfpn_sbn_2x16_2x_waymoD5-3d-3class.py -``` - -For more detailed usages, please refer to the [Case 1](https://mmdetection3d.readthedocs.io/en/latest/1_exist_data_model.html). - -## Test and inference - -To test the trained model, you can simply run - -```shell -python tools/test.py configs/pointpillars/hv_pointpillars_secfpn_sbn_2x16_2x_waymoD5-3d-3class.py work_dirs/hv_pointpillars_secfpn_sbn_2x16_2x_waymoD5-3d-3class/latest.pth --eval waymo -``` - -**Note**: To use Waymo evaluation protocol, you need to follow the [tutorial](https://mmdetection3d.readthedocs.io/en/latest/datasets/waymo_det.html) and prepare files related to metrics computation as official instructions. - -For more detailed usages for test and inference, please refer to the [Case 1](https://mmdetection3d.readthedocs.io/en/latest/1_exist_data_model.html). diff --git a/docs/en/user_guides/backends_support.md b/docs/en/user_guides/backends_support.md index 5304ccd6f4..b4fafd4e21 100644 --- a/docs/en/user_guides/backends_support.md +++ b/docs/en/user_guides/backends_support.md @@ -1,4 +1,4 @@ -# Tutorial 7: Backends Support +# Backends Support We support different file client backends: Disk, Ceph and LMDB, etc. Here is an example of how to modify configs for Ceph-based data loading and saving. diff --git a/docs/en/user_guides/config.md b/docs/en/user_guides/config.md index d0be37af5f..55e693365f 100644 --- a/docs/en/user_guides/config.md +++ b/docs/en/user_guides/config.md @@ -1,4 +1,4 @@ -# Tutorial 1: Learn about Configs +# Learn about Configs We incorporate modular and inheritance design into our config system, which is convenient to conduct various experiments. If you wish to inspect the config file, you may run `python tools/misc/print_config.py /PATH/TO/CONFIG` to see the complete config. diff --git a/docs/en/user_guides/coord_sys_tutorial.md b/docs/en/user_guides/coord_sys_tutorial.md index 02acee02fe..08d646e59f 100644 --- a/docs/en/user_guides/coord_sys_tutorial.md +++ b/docs/en/user_guides/coord_sys_tutorial.md @@ -1,4 +1,4 @@ -# Tutorial 6: Coordinate System +# Coordinate System ## Overview diff --git a/docs/en/user_guides/data_pipeline.md b/docs/en/user_guides/data_pipeline.md index 60dc18728f..5f8cd227b5 100644 --- a/docs/en/user_guides/data_pipeline.md +++ b/docs/en/user_guides/data_pipeline.md @@ -1,4 +1,4 @@ -# Tutorial 3: Customize Data Pipelines +# Customize Data Pipelines ## Design of Data pipelines diff --git a/docs/en/user_guides/index.rst b/docs/en/user_guides/index.rst index ab868d1934..7c5b53e1da 100644 --- a/docs/en/user_guides/index.rst +++ b/docs/en/user_guides/index.rst @@ -2,7 +2,6 @@ :maxdepth: 3 1_exist_data_model.md - 2_new_data_model.md backends_support.md config.md coord_sys_tutorial.md diff --git a/docs/en/user_guides/model_deployment.md b/docs/en/user_guides/model_deployment.md index 0feaff79f1..4192ddb963 100644 --- a/docs/en/user_guides/model_deployment.md +++ b/docs/en/user_guides/model_deployment.md @@ -1,4 +1,4 @@ -# Tutorial 8: MMDetection3D model deployment +# Model deployment To meet the speed requirement of the model in practical use, usually, we deploy the trained model to inference backends. [MMDeploy](https://github.com/open-mmlab/mmdeploy) is OpenMMLab model deployment framework. Now MMDeploy has supported MMDetection3D model deployment, and you can deploy the trained model to inference backends by MMDeploy. diff --git a/docs/mv.py b/docs/mv.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/docs/zh_cn/_static/image/mmdet3d-logo.png b/docs/zh_cn/_static/image/mmdet3d-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f4076bd16294e416de04742174aba2fc2374a45f GIT binary patch literal 32796 zcmYIv1yoz@(sf91cPLsyad#JCi>IsOh^ai(*es_ z!N3gw;AZ^K6UD3W^(O!TTg66NT3y}R$=%7#+R6F3qO|mLXICdH8+%Itz-uW}%Tqt; ziu~33l_i0$)B>_L)jkLSW~{&*A~eV&`~olwB_w{+9~OzNOG-wRp`g79ge>CLz8+AFrm+ zH{1yYk}1GZpA-Hb>G_D(4*(!R-d+LjHLvecs+|Bpfb%T(3*y0zzaeev%zA+5i2yj5 z7=eS5pa~e_)*d1S3{e7VwCXLe0bctN#J%F5wH(+j5SQQG?pow1|2<=1ze2UXgAb4X6fPR9PlVP*RzE;YNf{oA$ zYa5)An$Ad~fB-3v;Q|0uH{;O1vZ@E(E*oF-##w;AOS9EZ@yQ;@v;qgvF#Dudpwnu#(D!^xY(yMg>C^eGQmNuGFsif}cUY7<7|h&?Re z2n868uRrw(@Fw7lD~1Xu5kUA+kl*_X07&Y-iGRa^0vJs#*a84L{!ki~e5Ftxzyttf za)Q`v-eTbXAgzGmXZ)b;fKdR=&}H7>zJN&(N}+E`0%@hQ`KntGl zMv`iP`-fZ$fTdEliN*?yr(CY2VzEYVZWES=p7Vdc|J)(Z_cf?a12hBlc+*-!PxW~q z$8FMGkiZz4l4mzb)j%f+ZOSX2eD}x09pL{t&Kx?)hi?_LXl4`>A!{0?PsKb)ZoZ>0 zq#G|}POC5SiHsVSWp<4D0vHV?IlzR3686{!CnU)0E9*;_FdZ;95Vv9KVTFY9^{{}G zO4J&de28!QygrE6Cg{smFds3{F=R18Snx?qk`!Lx4}aNK#b#hi;8(;^v{P7C;4086 zcr`_6lcCJKpWraOwvAZ_t$3cA*qlI+p!Vf%xOcmmRJ=cOQyDAog=WE5VkIHV*E^_% z+5A%9bILSEOS5J$%Ob_I4HX@7KB@C)MU;{VdZaOprjtvL6maFwPNdm!Kj zS`DF-O`S-cvipOvi`Wf0_r%2u#|s%$_`v$i?wRkiV#?-cJl~az(56$r4{7tx^HYES z_>JJ3la4<7CA%M4;!oma@nqfPfMi6OwvL<5>sjwI9PM%)f^vwif03L{z4}%u)(m<1 zY$>fyd#P~Mn5L&@y!yC?Nq(2fL-4IRUR`*YTu!(`zP5Suz_VBe@&SI!6Md;US6$FP zr`A5rqLGGw(K#!_iEaF z-+LG9;^zha?&_rcg~NIN1;yU+-0>v62(KWfaKbZtK2dYzuLScycHeATCXt~VB}60E zZHax>`ICzIEG^7O5g)gNyeM8-RXEXns1RJUT(Ofd`(VSrT+mn0zum<)`qeJYs%^4i z+WptBA~F% zpdX4|nq4woI$Vy^{-PnKoqOs2($Cf1?3nE{lDtE8)Hc;PeUYEup1xAK=rFVTOS0d;{7!{CoqE`~SMvDn zIr2(>)8*GzW^sCP&shS32l5GG0J-a=Q>)Kl&YI(O7+UUo5APiDH5Gp)X?Z)g3wky1 z3YhJa9nn?P1zwlzVhorI_#S|9pLO^0cH|-cx_iU>l>9^$%@pMa$_`3r5LHk;$PPr0 z`W>|pLkKMvtsR{Q_Z68GE*72vy=#&ajN+8~##~_KBWKzq*-y+&GDGTH-e1hhbaO;; z;p3R=gaJ-PH_E%enlK~b^7fG}^fu4FQ{4EIva$1*aqnp~Xt}$%UvbV=Y#ZEt?2J2! zFO6w^xoq3y`srhZt-Yqb`9XRMw56;i$SdMn_9T_qo#X}9VbpftLZ4*RmKzXZpC*v8 zou-}QZeF#slGjS{dv|Ok%TvNY$RNQ_H0&F3YTfIdkmpkBJd|oX#f~bpB&VV2VQR8n zd9isKwaqO`5?_92>Ly=`uDilOldzZ8P4uoh_5uhbd3yH)vL=xr+n|#qR^>eI3uub^|*J#h!afi*O^eG-cnP)(Bfrq0ta`?wv#hPYf*S|^BHTl zS$NqXr~F5(N9s}@)Hn4tbxv))S5D(JL#7G~r8$E21d~g@4v#oiog22AlbI!3=p5Uo z&c4?TWT!|rsc^0+sk*L_Yx%vYr)o0mcj4`@w6vzw{PS>MVZUJCvEs_0yIQH!_U-IM zI1;at`XqLT+QdO=%{|x0_9AYyVf5!HNXSg+@cpl*isjQ>;rvUV%s}H2-G|EZ=B`EN zrMd1^Pv0~A5L&XAYsX&?IvP2=^z1ri{VyD+j)GU?sXkD*b^i`nZISm>>(7e!E%e2> zls(?Jb$7B~sqXHs!*b9Rj-^u&ciu^dIxVFirg=6x8?xi~yxsZ1vR>rpyQTgocdU1% zcXa)GVDkm$zJfQ$lz6vC1y{a9j%04<@t>IdOj-!7d{^_|fMdQbbB{rxc)hHgOjgO0 zo9*DFtzwJftW4F{k~7~|yswn+zuOsW76zQKU?=@|*84Y)>SvR;=7Yr( zYFDoievkJ&SD|NjOjFqcPiphIxq_w&0N}#}06;?kfSbQh$6WxxgBJkUGX(&|zX1Rg zPG3y=<(@uMRFrwE?X`5!>DloDp;P>~W7dD#LIrSa@2PG;{^ zd(%|<=g~ExmInHt=3#XO#`^kOLO)V|*u}&qSr{}`nD$S`Fe^~S%B4w&xOXD12EE(c z+uF<8+S-mYsmIQ4W`1@0b97wjuC^iGvxo&8a#M*Gzk9HI02*xuA~5OSkP0=EF_4|` z@}s{?4Y{HWTg30c@S^6$TEX(eY5|F2D&uXlf;ZZ{kQ+WxfV{ua&{SmWe0Ab)pEZ&B zQj=p*{Or52Y&8rpFF(-ST)kAP5UBC+_w%Dk>8~}8)suF{=eMo*<#?Crrj+4kl;M0h zB}=5gl-98Q2#`Qim1}!?q&Qp=P7O1L9l|=xd~kbt|9NaQ@Olv;@!_*DM^j2K8d0E8 zoKJ2OhzETQAc0K-phG{xphKm5`#|=eU;WSHn{%3;5mpDTm%yH-A=Rtb1b(#F)iB+e z{RXkfGD%ob&8jz?*O{P(-isBp3S_OH{qK2{%o)Eq-$N0(kfQVuLZ!_h5?C>m!4!+C zt(l;OfuVpKPs&zp;YidOvxORO*O$}_=*508{;!p|B&zjUvoJE)a*!U%%Mf1MK@<%_ zbrLhNpzz=R==x-#(_}D@5`?Y8_5E#42i|D(5`iCAWa$G;0Jd18ANTeD+b+Z@)qBu| z#&zz@#XD!2j#&b5*%TmgWHQZ=p<0M3v%6W_Z2v5}GXFyh24acEyXlDkP>2s3ZW|ncpUY2|oIzJzTF<~2^mfxy@P?mZ2&z>-6#Jt^v_FGSei=eDW`1o*> zBZ7EB(Gp@KjiQInh`i~*?NFh}3YqQE$PO{gf@(B|3$g~2nItn41k|Pd*S{N!#gb2- zlH;v>EbkUeK3aDo8Kt{+C#WvF!i*FFKlVp<5GJm|tO<4WLi{L(Z2BZalXw{X7$VEe zOFT#ZU5>KoGszPwI0iH|XZFx)iw1|6j2s$4gb&Jw)dG*3z>hvio;Ta*GTgEjL_IzU z2*y)LXt4&*Olr`}pmriG2ehy5 zK?{CK)C$~S?=y)QLN^70=bxWa!3l>n67D9j1OLj{k-ho<(G6R~>R{mH0i=wFxDg9} zJr>>5xy3b{^P}z&PRR6Hj2haBJdo8d&SHf`AXOqea0erZj+&PL|M@kGs4Gz25noV^ zBVD!~o+xR`crZ1nm9&L;+x9~4hBl34$5Ez*Y7hc{9efu|wkhyWd?<@@N$8@ygf@em zP@1@4-W^ck(N%(@BvAvZp35$>d%K{g%^<_my9X>;%>SSJxBw}DbPa;(bSOtqA&#G_ zgkjn}O-nJOZeTK8y5fY#S`wW=I-T3qPl_Cui&!Qj#?I4NsLBgnU%ijUl`m7 zo}aqNILcUv)DR!9!r~>xv6HcNTmOgq4MBkzz*AJ?ti)V$Q8n4Hv6?PPz6O6JY{f{V z0>2|_0yPT^4YX8BjsBkxRRrb%$7qlc;Rf19HZ}!P%P5MsPs|!Y*ovEI3{!%a2GROj z4}~WEFVJkz7edMXugT$P`rap-qQ#RgA64I0rexW@IHei#kF=Mzpa)Y=NEAPIs)BhX z?0bg)hh4!~qu>;>Kmo%KewC}(l9)xT!KG|uDv0sjt6d2kKfFYd=dQG1YL}JuW@lmz zr=&um|HErh7?G(S;k$MGgU0tc@{@vMC|XHxMKi-~$vVcDHU*J785tOhxJQ~D+Cjrz z14OdCg1Dk2YX1XjF-kqE!-qTRlIG!_Q=dZOA7MDon=RNyO7m-qLU0X z?53;l{X+|R(Z~NWHx;WnY#AB|l33^VRs5k@Ug}w@IgB%IhrsQTjy%9b1JC6$`0e<~ z3amG?VPC1CD(9~8JBft;<0`D;n*q!xqGAauKlqZGOh6>zkE@!g?WAQSs|BU&ZhDh z^=D;0iPFxu4cM&fNxeHjq(=ftr2XI>?b~0M%o(V7WHisR*s7Os1f?YhSuYP`LC_OBPGPJM6;z;qaM1_Q42+Hu_x52Jx3O}K= zP$Zg1+M_Pgoo1*~P^jc>1SS7eRvyE27D95vcg*VW0p;q)(__x6h#-t7R`P{Lghcw_ zi`ra$`=1l&9L^OuYBR;~qEmx^S^EqL!_$NL>|d1n#+{yPd6XEut@cvYia0>YlG(-t z&j%g6!EvMEV1gC9$U*U}O{%W|dVp;C&SWyUmEh|mTT_f0DlaT&X~H0uAo<{gTXtuj zrFvW7ncP3I^39oDhDKVVFuXdu);$3eZ`wCX$7F;UOx95N#fhw~S6V$ibdcarqg&NF zvc(1dR%Q*;_1R`qJ|yEqlqPuZ>U-Bn3#Au{Vcw%5oF9&hlojM85L7Hl5+XCiMR6&x`R8~UTXQ=;wSsKpzcuG?(- zT@^3!>z@#9C-#>vC|RN<*_mEG>KiV6NB~%kv5qK_46MM99nIt7O=SJf$1nI+DDLWU2zaA52LI8HiD(kVeY&cOO(WqH>sdC2+S88xwCuFJEYvt)?wsO5u3{R#4!~ z2_r-X5M@!Uma@;qKlTpog67dC&wIXRzXnMtHR&C+*7!;KbrW5P9->yEHbqolh29~5 z*Q|xSO^_r_0ln3xZAzc~2k4qj2Qle($Mt$<^LfP<#&4*gpV`L1W3t z&>U+ zsFT~a_R*$PnU5^Y-u}9=7`a!Y*{}(iHvw~ z9sc373);7W{w&Vik;N{)%Kt5}oZm zXD=+<-&{}zDuH-ewr~FbH9AhRuGkxa|&a) zB})22s6mf1my>+m6whFoVu(pjOjbew`C5vk!pb}GfPq%uK&Xw};;@oiN?q7kzX}uvR zgf`3I3?f&JD}<>!r@CWj;i4t|^0Xb+`ttQKDNlYWRQrSM{3odP+uxd(FL92);82+E z3xCUiCXHY0d-wpiQB3K3W+T^whdR0JwAsbGZ?0rReJr}j5>q#Jd@`Imv+ydlgNF8* zA?J3b7NZxSZL$i=uckmUm9G45M_lF6&GsMvvdwhNrqtLlJX*Q}mAgN>m*_OHZRh8U zw9dBBk5WrATJLhBI2)%S$=t1m?=LVDYfNmWLG>|)cuj|)=4!npYOpU%50R_I&}x)w z&|>sZ6ZunQGfJ;sx^N-+;TMsCT(3gcTeoR$oxg*f>HK70M^9AO7vG?ec}_>hOOy2) zrU{oZI|7~JS^t}-W5T#IFvHCSO>>{y19a^m@6x}y*hm!{?<_CK^xK4iRM(n;U~Rmt4ZbYdi0vPWiwuXBRxnv(q8#-0g|l}BgdqO z#`DBf8-I*9{>e~L5jG+JRiGgJ4=evJaW0Ey;mJ&N+A+X6uqIMfbW*SLl9n$pUL{Fn zU>B#_48Mr}T)HAfG9|{t%f(eib-uUjhCh}W#`XSU<#9*A(50G2jgcXKXv9ip4kWKN zM=jT>d5nGok@;kk8^KF=LiL&Di#~C-x5lv+>5+g;wCv3M8EqJt4wUt*!-^QsvqFVz zc$NQug+?LemKKTa1U?>KPmU4R0g!u_^j!gkp8|6K=_=v5`=dh8HhB&Qz34EGnKbY~?4BV(Dud)%PU zpl<-Wyv`nz?yIXl87*Fq73%+!qFD-5b^f*FEe*Y1hePjO*?`Qu-+z`ftaU}>^6gCZ z85r;hnckLu77@crHAd(07xO!+r)ryjSq!}kVi7V@yUclr-b+GKC5SMdD#>t0%63xaW%c!K7 z`Uj}r6gL`ZxCW4<&J_*0&m!i8Gz#e%-6$;tY6P`f+%ZczgQgsCzi3S`a2fHK|NX*P zRP-(bKku_yB|3*L?41d^$t{o*Vr0b=K^O<$VTQ}X?x6FGr^GKHQPtW%_V2x*J_aX! zturHWAITz|t7?_Xi-$#U`Vzk>6w zKD#4j?OkcnAvv0tLH%5E+g$xuDL}@VDqCK8Nw-$0h!qFCNX3cTf!GG?~O-_v+eg0^{{G)CC?`h z6tb<=fV>g{CoOd=p?zb!e{xulq5<9tZU-$-HIN+TYU7&Ka(!-Ix+?NcEY$)236P)p zb0EJ8W0=lNTD{RX>C2rpiRiGyUiRH52A#j+#jg{c?(%k!pglJsRwu1Y(Yc4i<%sq( z{61OrU7NpK&j}cgST!tPf>RsMja(tJS(vd?Tb-E2K8{IhkoC3*_Q={HG=i@$Rkn`? zN4#u)FhV38fY#tkMeRa#lA_bZR4orx5Zux& z4W)uh(SizTno79&?-WebHvDXs3wOj@f$h(rDBOAAVoe9(P+C;5p^)Re zDH>F<0~tadmB|-TryJZ}IQwAspX`9d`!x}qw=eF5v7$1H;KQzD44Yz`*VHhtQg2GC zxxL_722r;VI=p>|*vBtQHh69%NBCMuCunHRb|w%6Kw=SLgBk0u7Eit%?ql zfr_&Ln(}AXFQgjVnlc*IAIdDb+t1_Jxg5*XY4Pb2ZQut6+ZWZn{@1v&6vYxiSS9R0(B8= zXJST+A6)CI{j`PGAKSae!;>w)qz15je@nJO`rp@=%0?)VQw6#>$sEU2rv_lq-Zfp08ypX%TEnozr=^= zMKw%x$*i-i2I3*`H`z%f$M=ynKIwZ`715@{uA&bs2aX@?{|SCv8PQ76)dS`_mVFUq z=a=GVFYAT8Ub9sqxD>r^fB`5FqXnL`-T1_5r90bxWgRC}t%7h>XKih#lU?TdFdAWu zd4mIS#~IHxr!-K>xq>z(-H(^1cAPK2>Mqv%vHT-7yje2Vf`;OOYj@UJKsfupza zzJqjtTv~g$TY)j3!D8Y|=D+R(>A+QB(a_Jop)XKlPze%7%BvaM=}FG4MoY{Q+=in7_l|%SW$|ZzdIX_Th=&OF9603QX_oJ1KWo98flLX zmzWEfMreMtqN(joZoFa!%*_ZJcsY#wf>1F}K?X^8V^JH~6yDrbS(f!~tvTqMekklA6$|hBXVZK@6YG?qBT@daG)zZgS)qmuSn~^BiI*?OMsA*qnfGPID zXv>vrh#O9+KC$zB^v|0pU)n&lK^?-%7dpEQdJ>HF-42`Ew9YgZs4K*-N!m+piNS*< z#SP@cggQ|V$>ge2PFYC=QrFCI`Znz1HrA-EA}{t&_aB3ueLhAnRHibqB<5?s=1C>w zcFDueZYe5pvDq0ajo4G!xJQwp;}DcX%sizKRaw)?58u*4hjEtPjVK-dqlbT4ZoKdf zN|Y-U874+Iuxx$LPR$9*!tlcr)$t-73o8H0#~DHNDTH&EMsM)#DIP@r6!8~W2O3P? z|0V9S|1!g=zw6r zZ+iJFsRvgW^HM;HDqMVE{)lQSPP*ZV?kK^E%o_o#oe^EK9 zI9w|bP^X;a`+*DvXCOAX>-+IekI+S80Gt?DpGZx{6q-CjEQ4^SITDwCYA*xRg)!80 z<4KlSb2jgstpCj^Mo;|-Fjv%T?osDd!RXhr>VT(hJX?7PtGp{&>QpjdF^@dxMWndm(SPgKBJ@zq6SzXs z%6JNlCjT)o@>ADen`d^j(C3%dc-Y;_ztT9mr?gUDLyljy_tKH4<@q6=Q7U}p(iBzA zoj%wuT<_viD&QOIQbdc!RNIo(h0_;p56ob=D8UL^Mqgo!oTld-ThWVrxU_Hnd&N~g z+Sv=G{i2{gpINeAvaqn}KGZs2iawzgL^o!B*sWM5!Iknm0$!HjvtUtUccneDD|VI1 z8E}D-6erUwCrG|xhA&Oxlfh*wKeT0g&uz7KK2FGv-mR4F|BEG^jjv!)%~@qNy=%qzL__OZN+~*-{Iuh|xQ? z1vfpOr4y8tL2M#Oa&mnDdik;8I0{?@(GP}T zyOl9x?Lsgs^~RzBCW@FGk+Sy>4*v&eI8*zhx>`=>cf0eJzj(q%3PHp!Ov7DQS= zuu*uP4sbNre!yl;89uo!1oMTa=8H8an~wNlUE9I`{_6kOX-4TFhv1q|UE<#3z0@in z^|*iD|Jxz*D|-(aW;wRrT=W*iWKdHr*;xWwSu5L4PT( zJz=A752&X@e~ZqZy;+hTdy$yBwS4MGg>}QdkK+E!*>|33#x2+n&uD`=w>+p^P?cj) z(_t8K~* zbzm6GcYBqrDZ!~EKh^!H7@@Cu!2x9M#mU6DBJD|Sz)c$wT?g*;6lw*Q)f)W`8p#@o zV^k}o1O{E^yl<4)CzVveFhWDf`@FO zFQdv2Fub`1mcVfyzg$)v9(k~~jHZnX$CiF82ZB1hp?B$kF<^18E7)k9rRUW8!*>`j z?$%}D#LH?7x>`0t^f#n^Q{%Zj7I$WN$Op3BCZ8}%ex>9?B%O|ho7^sSA_GFA@4{w(fZ?4=w1gSp#veU=bwE_{Zohse^&T# zV~uMIjxJdlUbO@L1w=llI39DSg@>D7*op>r4LwRCd6A@hKT3qpAnuAF-rb`W`~p@DZ02u1J+ms5BxRrgppoxX&}uGo-MomRIAjC86yHtLlu8!D5R^~`TZu@ z`Z*l^^JQ^XO3=DMdQfH9T*a*EEc^ZY^{HqP7n)eDab3erc+|P< z;J@8|IY}CpUUWi9Hj{MWEod@+5cL?U<;wsP$9Zn?Y@0T%Uk{<07+Ev}DHhqD&!(B6oQPILOPj)J zR4^f}Niz?yHW2-|ecPH0KYoQg)Z&Wd>z9$94=<6^)_ME1u;wrH>kdy`M!#n@}mGwtn)KVw!9htTbT^{b+Fix~ZO|P8(*kL@(_taY_ zV&)7g748);gNEM1*Q7R?cQ+KsWNkkDEcV^|?Dh4J=QGjNJhCvk;*;<|N>QbhcVfTN z_mPpzU6()?-!MsnA(xKVs+Dqkt{W2eYxt=SA*H2`1f8SS;z;b=k z2^VMitCWd0hcA_d=F+9M0h?ze2>z?XBsuS{Z+pVcvi;g>8}T5KF1^rZGV^J#q}P#` zZa=lTRhPm_)m~qbYwV0;BxZ2A_emE5rDq-8JQWEOHP%E&x@h%FxQj{mMjQTqle_u_u5j0e*Zg1Umed>^@a?kkXTJI3% z=}$fDu+9%3VELVSs-9$w5UDOLa5dZI=<$|Cl95=<)m_w<;U}|5(aCyFJ&7aqxyu(C zo#$PYicNXLl}^p2PXrCX%^MsI5ssC6%MA($B#%YtzzBFOe0!dZ9lwD~vIJDmS9(>95 zrD~l16cOLZby4Ou`(~dheHjs&f73WM@(n-NTh&E|ZWq9BAe1sCIXB~+BwCMpYw1+s;1kHxWS{a!puQsfoiP| z;Y^N96uLLt>ScQDI$lhdT1~;m5WcvMvu~0oJ{%JXr8;5bS3O~nuoV<+K_NG@F(YZ# zNlqOIL8~2h){~~nWaHnWoT~~ceAmDm8egBH@uG|7I8|M+n~i6DRO&*h1G#Y(bhW7c zgmVl&WcJ;{V>B%D$;l{?G1K&3{LlTcaZdODIC=i=vr_^Yc#b$2A?b{7flah)2x-^R zx0kUvgQ_~R^rVohC0T^kTkcpi`rXm=Fy_`lp0NE4So%KFB*l4Ha;<_~B}eGY^ZY&~ zPj_DymqxC9Kl89DFMsW-i8}!hMFL@be!1lp$m;cM8WG?M{B#uFNNvh4(rN3l_3FH9 z?zWEMV=Ybb+p{}Zx;+(c@1Kx$)FbxVr+GUJ``eh{`+H8hNGO&fYr`dalSW}n3r-DbF#?&i{q~L7v}6INHsLl%@~aJvx$SA|%1x#SWm`Hhh1_p%(JyG3`@^! z_A09+cFt%^^z(_P7Ed=palAi4kehA4*`tJ9(~3l71EZ2b!npYoBqc2HNxEilmXP5@ z{@<_lK-C%jTkm6b@a179ZSRlU>h3<%u6867f(IUT#EgBop?|8r_3~C@?iq9dUFFU1tL9U-js=qv3tG-(Z`1PfutwC zCjqVEAABd?;G6p#^~NtO^Y`-J!da0(xD!sr9VOML3%+#W{O9YEP=7zP>-ir?hOy+u zZP;F~srZ+8=7z);{^S3YPg?qmSzoMJGcd-W5=x!tR<_TO1>bD9_bY&x&tpDa!M6=l z%7YVCZO0kc3yC2SHCvQDl97SzohLkODh_9%U)`|?ez7HGvE5oV4w~^f3xU(6#;cAX zZKb7<-toBH*^AE(q(75h9_t7;>CXFpU7#N&OKbGe>0Id{&{mJwsx^0@B2q27}^3>(RPjJ6DTF{scMgn=gNadIHAf(|@ngAI)x+ z44z5DqJx@I#xGnlQWq`Rt<Fz-Aw+00!%xZ}?PC7p~Oa6as~IOGaQk3SG=Mk#0T$iz9^ z-FHbo@(1CxQ}ku|2m^vg!&!4AKS?o~jh6CNRChJ{;#@W@-@sC><^Az(&5G;8;B@SI z0mHnbw$ei`1Gj#*M`1b`sM#muHqY_42?4qH%Xj6Z+%2yU3mYj>NG(;01ISaCw*Z&h za6K5k5o;>Sjq$$Fal|hFOnPTY3PYX1%F622aYhKv*4`}J-1Kg1R+v_AI)dTz#0Tah z8yS3}JA2DlIw6x9qd(Gqa(rd6)8;H%bH1533&1L#7UPjpb@xs`V?W1R8KJZXYz2b2 z<2EvC>#iI-Ro(8$h6yJIV#ws?j`Ok9Nj2v6Ldb1)w3kCF} zkX61JtPhi#d6K3yW;{K42Q&#Qe4Mft1mOMmxZ^9xmdk|p6z8t#=LEqL^Nprq+vGGu z3*0*$b+5*8#?!bw7+#3Qcd;pVRD%O3dVFL!LJ-_qT0HFYfI4=57u5{{7v{C!uBb zix{Hr+J1G#nzncUmOfC6B3*KFH7n8(QeqLEi&=mz5r#x1^yGS2Wv9{w+z}ci+P$#a zNsi={wxHBNZtgVM7 zizJnoq3st{_`Z3DCEKZy(j}WE46c|6)hX+MG^#cEcSjNCd_zzDCPK)rMJf~$Qq%SQ z-OTS~MHP>-zi%{OZMn$M1t+YdI&6d&{ED)m`ct{HLM!v7wmPQFH}))IMvC0BGzqx8=Z2boB&M zJ3ES8^Etya0}d*TAlVWjy0o{>Uhv92bCY~)fo}TtAw&ali&%%lN?7RwP<5idM5qntUu2cp`INm%$%+$7p4?hi85WHoQ$& zAOyqt1y2rs&|w@AE=tv{)HKAa)ioWE8X7*|Bs_$~%=jxb#VL`eCy*vi@}+z&^ONn< z4*VHqWpnoGYML!gTfLXcpZ9v>1A)c*zE~z6!6V}jz#iW5_)9O!mBp1m^QCNkgWg~P zpaI4tU0MJwgEJ{_Ml?@k=bMJ;+I(M6aD~Z=;4& zt+ja^*o^WQgUeTfPsRN4x$_9%s=084r*G>I_1pBj-7RleJ9J*--ocY8vckjtQr4H| z`i_@A`(usR>-wF?c4`&%vV!YZSK2}Z6jCa|xI&h6p7NzaI7zTR+fYD6$Q^r=sVW5Z+hd5>;qxXGw@Se zHabc0w{|eWuSCAOT(FmDr)@-LMoa6*r;ZTXJg%9Fse-ItBdKoRsneo$IiU~wF)c+t z&BCYua6X*JYeiM@da#4D!S!yh%|)|oTlL66uOofPkAMN6T^XbdK5Vb&B>$#E2?%!8 zX^&YmpsLyla(*4a@ermJi;i;nI*292^jmrEs5y)$m%*@mN>?$;i8)ka>zYUig`?s81nN;>{ZqIY*m zq_z)e9&PGXLSg3ojo(}K_S4~8xUwU@@j+s02Vn|#Q0Z{RD`hg7PtW-!%)=PSt33Ar zNc3CZ>A#>2*>U$ehK|Y(k&emOqFqrAXtu26PB-x*FSon>QF`D^Ak9U9A7;ykwD@Mw zb^H(g2LSJf=FJAeT*-VoyiF_dpWHkIc?Y%5F=TGm0c!w1Q04PxKfql%V4eQ*=CfG9 zu^-Q9!ZzgEkWkG^t>C{BrVMN2t6peMKEE*&skUga0@pIK8mBZRn@4KfRYtf-M48FX zAa+PqhP*KPTX1mx?&J+Rgzm??6(nV07t5d84<^-8?Df|nxN}=GI>V&;dz%c4$VLtS zv6p=&;qlc2gVD3*N%cme@hkTqEbcyiW4(WQOG8yQU;d>9u(B^R(D)N_*<;Zu=Jb1H zuhFafnO~zAk8wHjyEFT^v2|`lozdrkHZ_XZgfchHqwtIvbjC*%_yx}OT1~6o8tK5< z`*VsxlW-kaAZGaQa%BXrQAPmWsGGq{>8ne%u=P^U(bLvv(#xuT8M|0XMg)G?7d2zD z!k}(_*X8A3S*%uSGMSqttC1{hgn7t|B+TMdyoawQsvEAM9$`v)BA)dc&83LlhNw8@ zalLjg>zHGr8QDy=(+ne}omV#1@C5LmsXi^&hs)e%`$1EsM1;4YkKqf3ti4t(Itlzl z9r)G8R&7=C{-%DX_^TtP94i|CE#JHdYU7^eB;P;egT_44S;j;)N(aqQ`+;{lZUcUK zd61x+ByKeQ7{LGvhu?ZBp31%7$U%Yl_jFXhU1}di*U;~&T64$G@Y8)Q(U9HHZu8%+ z_H_$%xTAk#ytC1N_)hqhQ$Rw^t3i(f8k_VfvQ#*f z9RI!^{qOo|Aqg|c24QnZZ&B6(AwFK_m!ZElUfiL`OAD>GLAH9^RjV(JJCc|+HR)0QnLrpxi*r9WeGxM+(6<=cbJtd=<1(*u#igU(Pyv$`M1nW?Ue-B1&!=7-I zeLi*ilTzIU^CW~FnAlu>5qZF!0tyWuP*EY{+BxjyxsaAz*%lJ)I4)I20|S$iYAh1z zz*UxEl)6NV;X?xx)5;?m=3=S>Pi;?Zb<37eSH(J;1Jte|IPnoiKS%Hn@oXIVr{y}~ zp4B*{K#CCF2BdF+CJxjN@;ah(4=;P;y{NqQN0p zu_8r^JB8qG#ic-Tm!QRiJN&cny`T5}0QqIDE3>lZnwj%B^Le-L9lPgyeC#m((Du2! zlA1~s*B8+H`RTR@5hf1$BpwMY`3l9EwypadP=zEp_IL?gTw!0w!z!#X3g|e<{x!-Q z9bN3((7rg}E`W7Gg!y>?2$iSmMK@kNM=c$E(yv$Rc|D_Z$q71n@tW+xg>ST;IU^;q zQ1!ccg_t+mwp+sR?{=ywthb~xTe@CIvXyPg<0^JT`T`MtB6{@+lZvcreWkZ8~Q^|ZF1dJkV5{TBZ0xz z>@Uo2KQvIB?4#zfci89h0!|u7<){ z^kUoh1PBaPtuxho_me0PcMTm4FOFIpHK!f|U=8>CKHlnznl7`qNbT7mctN8WT)MhE zvoGpRmdMQCJ2#~o+@`RWbmOF84^9*bsU}UVd5i{`jf5QH6ytWr!rsNuB*1P&r|q1$ zCCnMJxE(wH{`@k}S>k{z$`y(}`)w{;k+Ntw^G?GN7T{PABy)lfzBnqITB!+f!2rUr zjLU_`E$R;M;-ODma&y8Rj&Au{RXZYMxPcb#ZK^Ce1m~fb)M&iZkL0_GW$u}NS1XTW z6vWgMvb{mE>T6-wG#Tulp43f}BpYD-o4X(ox?2lHvHShm5-Tj0*mnqkwGm&6KLKj(V z>`dw&`NU%Wh34l}w%$}mrhap2#Oo5t7ID)Fz9Y_>u^p`OP`Cu;VwbXe)}A+5_0M^Y z-(<9w6t;iJv)I7=9kpqe+<~-}$NI{=DUR2Jvz>)je9RczM*QwZvkO{)d$2jb@GFaL zo3jb~mIp-u?9|fYTCSnOZPzp!aqq2c-gRgea;lJ|`mwFl5}1n6aMyHoNU7j;S1vLUJV{|H$UGiZvX*>JzPYQqcR*PS`91k!H{o=O`FV|9pH)wiS zwlvSfIJ!N%YvwrOj41-Gdp>ABdBIsR%ITTlsbe347>MyGM8=nK!?*DZHh3hJYaVfm zgQjAH?2kctv$?x}%iK;W4ic0v^o50s}^6mP0^K~`a==Nm0B_AMz|7MKj^;uqt20= zga$QCcfi{;?t799^)+plKb~7cJS3jADAC2bOT8ni8bIx$>7t$Opd;JpjJD@` zv7@IEE)}a0;YY6uq#OlRYs@AzR3wsD&DH+B`zdc@Hk#E6A1fc$K4R^e&U9_{#%Vp4 zsCqHJS4Dfqf+1h7dBwtrkJgc?kphstErxm9shw1oD)HgP9Nv>}w%Nqp!;-tsv|}J* zRrfwQh(8zlWPJGE2V&;l(PD0dKzvC*M3_$ZvM+GASK2?|XLoDeG5l$ozxJO;xW2He zpZGK1+D_7p$;rVNrhoE4Q(Y3j6&L2`(MVW-E4#6tcp~A=6nQQ6Hiq?)_G!mqYzK+- zCFr`)cjR~E^KleQ+mgxDt-2W#u4v>?`jMwHrc2CQA$YD&>c~5kd8Y`^$U}Yx$J(`+ z_3n~MiGzng-5!gZ`GeJEbYE@xGto=J&y>?H{(9^;iOBg4nV%op{LS9wa>AI!#T?3I z-JZf8@-%QL>Uf_e(|ff^;pUnAkA@sq`KHAvEX~Z@Xib}<2(Oi8TIcno%vCK5x$&Pv z>QRe*>)00yo;a$L3)39{V%E|+hZ*7*d=ZbJ^C(wRSU?!(S-1N%& zf$35$AkpW+t$t)I)%y$#9Xfl1m&DAIT+~e!HW`cb zz88JD6zo{IBTz(KUCPa6v;q~NvykzxKR8?s&<;BAoK4Kfk74*lrb@$SMoH4rF&CDcQ3 zh@^r+IO7pzuFeF%L0pHA^{=W=R3E(SZV5^U-zNZ0AR&3$13`hp9u>S*V;%ZD4^fhX zPgWaCmK<+FxC>^nUl_Lbc*%O|39c00SrwkS3w)~LxXDKqey)iJy+dlsrTUHuI@(K( z5s9br{(u|OK{m3!w#Wbef}-Pw!We6l9xCZu@FbSn#Jm(nK*%jZlk4(AJt1_ftr`kG z@cr~UkO6)@9!d*E(BU~eoBaNZ#nq_^^N^;DcD=gxNDxIw9iQb!y@F=UgaosPb_(5O zSU3EPKYP~aVbj3zrW%;k%(+%^ZOZGX4nP@`7OcH{OTD~CY0d!@&8>Nq^=9QUa(|dd zeBhb_KJy*ObM{IV+-ce_ir}2|f=U%{dw(C($pFUSMY!_CBI7ewwD%Vm{M`X^>R!oo z699FZTC~LDNUVm}F_V@*tBw|cdO*)Ng0#i&>syzQ(HlBVw(HYa0nx8Zbgj}nu+qx9 zeN7JfG5uEp{VRqEJ1;e03RSpPXKNw3p=Sex6&ZtMHc zxCgdA>+;_RAA&3nJgB=?2OBSx?b|6ix!k`l5_G`R4@HalFB-~{CBb04?1N8`nYp(O zIv~@Kfn}lfD!~htDn$J-e-`5v9?q|3%P0!qrkHQ&H^>A(0`pDJzwfJAn22u_Zz%)t zSNn9^XdHAuklS47lvtmI8f&+!WsjR{;X{xEMd`F|GQwXYsxlJlPb@ftd9ld7!7n%X*ME4*a=jEH) zdd*^tW*Rlb=yVu|_<)-V&er%r#i4u%NhV|SCQKB+kUipSTQ80r3dv{k1SYL^H9e8k zRf@<>RZMC9re9=e;<5yVRTCs)hs!L!zXD!$%X#ZeQN{7a4e(Nr5PiGa+KG20HNP%R z&>##cwdgJ^=Gtyy_dAPiJe2&AeCF+sf$f+6T0PC*?pf#QXn%rQP zXnkpxK6caOopYe@zLfabqphj zH0Bj|X7?$wh0_?(#gDZix@r3!2V4%e7PCp=WNx-Qw9ia;Tlm5Qs(alH4K3U`)lcHT zt2)IL*n1gIUH<-N&3yCbo7rsvIVAI!&*Lc;*X~nx(z4#(K3wl`Ya)RE`zVSFo_+0b zwvPHjw#B3f4PI`6J90n}F|g;muTnGq%CB zFR!P#=+cs210?%Oc-}K>{H^&B_D@9TDU;phDsX+a#f4!eZVTBN_34_8XxI@E^_H$T z?1u`TI+$-gJIWrlE3e!)>mw<*y%~yDJ@Jb3+d#$qR{Q9Tw7DpSZ^RvM42#+&jm+KK z>QLtvgCaODN78n?+gC+K2S0c~0$<&vF1#>=9^To!!sDot~tUy3>Of%g9{Mx^{ezLTNOE#jBI#Ir3%*2#pLQizE| zgir97{F%RA7kLC%u(HiKglRpHiKI8?&p`7XPI_zZM{dxG@te;X?Mbd2P=$mGl(%87|3)^HR=@WQ^;V}=k0BRJw+)8IqfJlC-wAa96>qN&s{ z0?EGWR1O;D$i)QPv@@5|nh4Qm3itFeq!aw~Xv`?BZSe^(Z=GEPy(W~`@zc)nLN@c^oK~ZWw^_w;;Hb4r3K(krD0ZLJGVeb`ZfEa5h{i#; zr%k^QRh`8kF@Nk^pS1h%cisAutKRCI`FHjZJcifEI+KWvh45rH<7kvr?US~z!tvim zNPh|aiRrRsKvN4ygc8fPyIL=$PEgN3RseZvBm`>I4&&u&VB+iMbK>-b6^>_-NknI8 z+JyO3scF|2a*-w%&2LVd;m#oC)b8^1`Y_6$Cp z#l$PVYVXpyfJusDu0%(`Kn3wnaB9x4qo_~txWwz3eIAe!?i&q`P@yb_%Dj91!SQIc z=;-Yi`k(!Xc%xT-fFkg#V(ecAT)4Jyk@!BlgtxQ@kWi|ROtQk1? z5@gHD-W2np+Ed72%eU&Dd6<+n|KRiq96#*P2WW5BTgp9MIQQ`Hr}K}vn++dFx4$)# zoY->~iXq7KGt_$D6~9bxrLI}*JKsO_OH|*zEuCdj!XEnBIeXosL=!Rz2nI1W24XKA z-5Av|i^1O&tQL1jKuIp|V(d}H6Fu&(eLiwb+2d-Ao_!hsv)M^H8X8$UE$#)IT9=ic zEz#jF1t#!j$3cs(a`O-Cy)G-*+62gE-_XpzhMaaAU#I=uV~ARz#&)aNv<0j|*fT1a z*wX-G9!STP+Aqi+N$m{#8H)NAAwLZ|F>0V+QR!*0l}GcuJ0Ic$it}qbJP6+)_JoQpYxHc3#KajkDI<%cVa% z>usdK3;oLkS^#O?&x(SA#ydgAW2oWMva~g%l~}bMJA;z6x&F&HWprqofFp_Sf<_HAr>7qj&upbwyO(J?OeR`Md#pMP-pVZ6Oq;j~y+x`85*9ha2#^Ut#E%n&Kk zH7d#p5Xk_QK1XO#OfK$E41 zAKUFTg%`{GI7pBS`CrDD?%6n4E$~!Z$c@L68s!V^lqk)f zn9KY?4#whZe*)vo&Wlr}ws}>hna98Aj()`3<_r)y$KWolDK!$tICdWyHpa^;(9_Rn z&8l^aQ{QKUl^6PAt)!JE;_OmL!eeJm6+$gK^e)n$>gtWBRKZ#XlnU`gp#y`UC9Qq! zQxm;G*-ooPgmvAntmyH+?&((8bf=p7Wx$uJ+YTF1^{4aeq-Dx{qqhw4ch6|n0udYw@?_ zA8;dl6^HWcV+z!9%=mx1)?hGqktJG(hfU{eiFoDxU7&vT{8}w(9H4&X4|#kn?vVTG zVh(_?bp(iUF^Kx)Zqk+$c9}C}jnra!I}STZ8Mt;t`ACB6?gr{w=Gi`W)GkqBdxY?1 z|H6jvfn3#Dn7}HWIMp~iw0r)qM9GH-;E(uDcx^(J7Hybs3G-=8BC7KW(hym2g4P}e z?u*ceByS%^#?@ft#mpd5XzY>KP34eIUbQa`%<8>U-Yu@{F;yA8QrW$)_g|;Yiom@_ zI6ON?Ks7xH7)8r}Qrvh%jcjcsCfjw4XVf%-UK_gw2>SJmM=3?<)6U#g1uAOBSHI z;{-H>xf)Ap?B%<_yY=dYDAs=(A|ri+BZp=3Wf@K*oeq;|dGOcxu)V~?wBcS2B~I+S9?{QKNARD46WQ|y!_4g3i2#o>D!@pBxf6b^*A5)OrxnqJ{Fylh$=I` zt0GbCoq94?*|oHVG$BXn3s>w-628-#`N?Jo`MHOg%5bBv2VsZ_&N;GvSjMRGs_yFy zB)qWxd6;x6v^y#wlk`QKT{PfTA@-QOB? zw-q}86;(d*f5z*3$f{;8uUrG9nQMzrGk6}KAE3}Fx;iuB5((jp_v_wVE%zsrH4WlY z(VQOt(ERx^^D~|f>6UQ4Ou~Bzx z^>voG#IKHt{nk8!DP9(wgDsVLydK`XxLgU}G&y+^mkCjMXVua(2Fs`eBFDm` zM;_T$*U}_tn@j`0M>IRM3%GFGuIgOz{2Fx#Q#|8Kbl@Pa+}8iRS~$!B9}{5-Ic+2R zVUv9A4AD%prJ0u?51(Vy3NTv&0zq7%EV64g3?uO|F1y%*Kry!mpe|lZlE_-vO-j`R zWEMs~M^iv=j0mxKpTn}7!0yT=Yvbu#b|o@d!bXel$9iR6oDc2U9f9Stk6K(;JEyB3 zLf%8eeBUv{6B~o!O`3m^*%R_ni zc=ww<+4p~jvkyC0T}N?s(^X{ELxAY+dDc>r8kd*$ZyPa_cg5lXtyZcj+e{!yUsA{2 zR?>&_p0_9)-D%D9PUVrN;33;Sw+5|ME*Cc%M*})lz?HEr#G5wg~Dr24SBE0i}^BT4%@iUORV=wxrbwJvuAFQ8F8t9Js85@_; z{9{&S>N3Px0c?K!)m{+;x9|e~jZa&983jC3s3>s&8l*1l{sy*EAvZARzd2R#DKNnm z4TmF8VoQA0#jqw3qgbDw31K{|BdyU`nn4NB^n>2exe6Fr@*bDVSyWt~XN@Mes`(9& zG5#Axo39B4T}2S3y>$ap$YAdfk1pL6NebgN58sS&91uj>^H70nv`AC z>bnsAyp(d>+W;#K1J9&@j<$rN!TZ6xYpYtDB2qR&GVAarSq^KM#p4GW0XjT?LsrhTtIa7 z)srNtCl{6LrwTTD(3<&=Lz}!d!};#mHrDZ`wE{=%CttGZ(G7Goh`%oH1bSRgA#&%~ z6`bF&7|0yF-eCXYpu?J(dCg>b5j1%2lw3h~6S+vRe=Wx^)XF$foZY2;fS`e((d56W z9Cnac+B(O?ku=~?EaG^9Brul(?$I6S*~Nz9w#{>Gt#=>lvg zAE&dRVfIc*n}ldBUiJ}Qpd&x62yaZ!2&us%p*&eV+@`4gRD)5%!nWyP`t@cx)B0Oq zi}JGR464%-D5-{K*X>}u$X=t$>!u|Kg8X9mz6~dBVIUk_zLS0l9+U8ob(aW4kc<>c z%z6EcZA|N#x!M?hS0S1GH?Ze&r*j2qMb~{<>chzn)fk~y@=6t1)o?BeYCzR?BhGh; zL}v}T%J+0zH?3(fL6I03dXG0PX7$z}>!E6sXHivLycd7*1AT9~+Q%B-8t`Kc)3|Ew zgbyy}XX1L6!-gaw-Z|)OQgN<5cU5kPHNdSsUc}s#Wn$RxdzS8ny-jKJJZthuTFPjq zOv!Su%EFu4eBSHSLulPzktQ|sJFnO=EM zX1nx4H%m&F+$zrGdFEf!)GtWZaUQu~`IeggO^ZX}B1rz_+l?kY4Q2uxydVJV0`%!c z>ZsPvJ^6f=unYXlhcvJw9zfwC80fTd9k$}$VS`>GV6BF+efyb12mOZLz1DMGUO;J0 zWJyAw^DqbDnx1v`F-f%}_OnB#pf%&Zw9OYYpM;)a?BYo2(d%P6Wn+15KJJkw(6KG! z5S1J;pmeHqG+A*#Az?>VV7&}|T)F|Hp$wM^0B$e*ZOe*(DocX>)ctwIEp<>kqhk!k z46^*bhxK@D2{ZU5lGyXk32jzd*J(}-2u$}qS z$<<9Bhqe9CR$GacX#w>9alY?^YOs_-M|cHK>scn~(*yp-Rx%`RZX74v(I9m>2z->Z zdp^O~`i10~^Q$qVKcCMw+X6Sn1OWg4xHj<)FbF(Dy zfYU0vlk-*8bGqZ$=-Hq2byVo_pi1-?axeR;DOaKv8`eqw5*qhAYf7pfh`G5yJ2w*7 zFE_?pdEai_r9BjXLX~u|;|@X5SWL2r%L)!AlZyiuiNiyn;DOLO#d8)<&qGum_eb{?Lw9)Z*d9w>GfarD!*y06$U@m*>NG>O` z@I(iWY%Q4#;Cnj9s9%I-$L4fVUcK!|J2y`W?|wl(QHbG9hVIyhcb?|@vn-rj>IQh_ z?47HA5p6r4@4iW0`66M=v1{_TBMTJfi!Ze>xF99l!j^L}o^5|4RD{l~ygo-n2vEUZ zz;SOqyUwQgHC3ZBF0^>K_R2ldnKJH`ZG9^i;$CfEhU4rRXGn!w7WUGp<_+!@K{1Om zo<1aZ&%Uo)FicCPbcX#*w7bn_d__U-OTONRj}l`(rqw0i(BJjT!_ymmO}B@T$w~Ap z$E-RA6c-Se?^t;P4FCP}-(uuC*LN@J&)-s*L(iUbR6da-b|JTuj3JAzP3SO@D0PJk z#i>8siT9kp-T(wI@7+q+dO#krU}%=5@gRQyyhA2ywSRTviKV6+C`I;W@#|Mt-12QU2Y{L|y)F{EFpDlNg5KX-?i{^+GpJ>BVRI9T;V=bSq8u(wJ$j&f{$<1GmTmA*PR^roGJ*k_;w^l(|z7XOvP`9w0dD1r1C z;N5AK-8_C6s&ua`P=7Lx7+FjJ^;$oQ!Yb#qt(k7e=UgM=!=4iwr*r3N_at+At}5~Q zVEU!hl24y|b(w)i(e1=7A?k!KUqg1LW%EIK+_wCKO2!^D7bvSr<4hNalR%^8V}aA= zsPc#JRP`8L1B@4yduxQD?9$hpPwsMYH^7%Sk5jz)7h6tOc@7aPV|y_Y95m=1;;{<`_T7UG^@CwtgzDp`+t6!P zf$hy2%f6Y@uvz=_o7rDVAWxo+QCMyDN^s}b=Qh!gpB7deZ7YQl+t36c^I%)1X8dE5 z%a=TtuF7-cl4gI@&|w2#EknC#3#)+SvTW98Rosje$(uTgE0Ta0tk^rRAP>yd>;#i4 zsT}&OS~<-AuU^V!q+IR@gLO0O_sXfZIdsK+iI6!{iIvI-S7GDlc0US(RFNY^8`1gY zR?ZSeC%Re?R@IA1?#Y!K=%k<^$Do$Oe`JC@gpD-|7#R~p8Od=7qOclFQMnakROE7} zZ7PGkhRE5FbDgzmu6vp>FuLfiGu_9q<%O^Q`O@mc?Rpw?bNBM+PZ#yRhg3?KmW0kq zn6J#UbDX(GrXTjG56*$s_n0v!@MJz&MKzVqF$Ll?5o}Ua=tR6%6|q1B{O55rP*8E; zK^IpYbLpR*O~BK^M>L2Hc;C~pmhGHnNQW}dnG*WZLCtEPWA=xB(VH`Lugx72^Fqh) zMsuur^NiW+rG>^`$LTeWrX03UtPkf;Tu~~%Zp&A3%NeUG=NH!?O$#s1`{JgoECT5P zg$$V)M`?7@@(6{d@CO4uSOC5Gbr{59ADV2sRDlw0-_Y4(JLriYZ-NM+S=KXDNrt#Ey zP{BC!z)pRbrf)j;+}+=#N*i<&WjE~UHZvt>l+jU{5weTl-bHq5kos|movKVfBj2Gk zgqnQLeaG!rM189+EI{IxJ&4xWI72yF^Cs%$+Zdb=`Q1GO?V0i^<@R_$#CZ1aUy6)x zTUNgTySMP3fI+}3&J&(_5o~|{(6R$zi#r65-a`RYe|FbDTt=+fZ#}p^h*KjzyVEZJ zQ(6c=in8-gqVH0YquLJ$9Za+t-cQa}bjbUdbnW?3DMwKR0^>ze0$xgcEgxCEOcELyI_I&Nk&A= z*Dyts&Hpn?GH1Nsk0y+9r=GS-ktnj1OEOgCP;WPNSp<;8-mu_&Os*e#mue)J^;@s2 zc>aZ{X(I}>HS|Z!>QAW?qYm|C%Uc)QV#_P+Qn9J4plOO0XFyO>F1GvEPwxdNE~vjh z5A;6)9oIvNrFcg!GNJN4s&@OgR0aO~mp)b+L!9$~M&|OCq9IIxtgFMobvR7XCfe6X zFU-Q?rtBU%JE}B`Wos_o^q`=+z$#T7%tbR2AC+ru4-NmcM76asmV|$D5i(J|21?Ei? zO9kb)dz0BFfulzik)q+LJ1^B{#lcbA;w zd^3eUWX%KYZHK8L4<^6lFYYucWvWa2GaK zxjW_VsX2Y?heDYhesN9+W83h!xNKcsaU}iQgcQgV1DXEi`s1Cz6<0P~{)sZ;A^j)a zo{SqE||^3s;S*)_3+9_#wNE}&UrE@Mvm~_R1D5Sqi43qTRYuv z$Nvaqw5o?b)g%x*u{TG%4hf^=PB-4v5zGVLhx==J(aX z-rV*t@`=|TXZBb{yFWm~j zGGJ{UHQt0{O|7d(QG7jRW`#CUk?&`p+b>v>S^{W==seZ+U6ZcB9-~W%;8^A@^oLi`gQ8bxlPQDSeujjgKjM|OWalEGL$K==GpuW=!qYhR)al18- z#AF6tRJU4of#CaIdzWwQlT6@g2iLyt7kLk*wV|F^<))U?NA@egFB)%h{;gnNwA%)n z?*UjN2J(XL=?DRc$6mLG-7O9x5sH{`D9K$r{zocbH?i*$ zlhQ<1T6qUwHfyO@)oYusfJI+j7gt&=6n&#y)7)~=23=PcJ!F^pw)JmDGa*Rgt`5{~ zzl?r!q6Ovz=6p-JG{*SwC+TKqsTa`OT2;hnq0^4A3|D1rHJ)&L*;B@;g<)(ZW!-$Y zYdQN#Wj?$f<9svMQ(i8t%pc%~A(CDTj7pV~AbFM|vjbJROTkvVHIPo>gN9`W1e_DP zJP|Kw*u35&pWq50Eack)tHogAL~j$GNOt6fm+5Zi5bsBn-Nf(8*=Wz4uu*&NqEi&- zldWfBfr;H0q(I{A{(*j?p)T}C?s}~gFRYEl6sGUb1TZi^!=K#_2`%|;tZ~jU4%Ia^ z5l;ZqAf71tNi8uER2yqQ?pZ#GsSqVGROHR2?)$cSS9jJ{#Sq>ju^eTGiyeD*HoSmc zZC?}5OTUAM@1k8hs=eJIsVD1nSBnVADS`mgXZ+M zo%&XxIW#v ziKOA1BWXi$*damQb@Gh7_TNR_m$j1Dmg`U9GEc4ZvgVWnJsU_%%~uwD0aR{h6(2me z9w~@$F04*o3F747sIECu);zeVhjaZQ~zcHUKGqNF>80eG-|5<6Ykm(rYMl{Fm zJNsg3TWyhqwEqs*{8bPnPw%{Qr2h;n#~M)+HQ-fZ5p=BoYd2=_k8WevLxJS@{?DCd z>}{De@6Xw3Uhh`(Gbq(|4P`4r-+SRrV1QRk~U!3iq>>Sdw#3 zHi2wu5PJQ6wU=Sr$LRgxz?{&5D1h ze@It8bI%-J`pY>hm_4z(I`iEC_#T))^!9flklyKXzAtywo(#xpE778At+0RZ+QMiC zPSupHGPALDnrZxMLs_lC|Le+QX=<^H4IPmgBvqo=yPQn)dnL1U$9^c<5kt};D<5e3gjt!GxzY+{hTyvUY~=63sprfC*efOXudN_9|RYw7GvO_R7Ebpb+N9JFqrHHrTGek{s?Jy$CFgho`rbZEpG6(k0`ciCjkPn$`sqybjm;6u?EW)quwH|Y#*Qa_pz|FD zsDD-OuT}awQwSJHG#ANxZkUnpqwls3Uq2Urm7<~?+F&Nwf>fcRk{8=(E!?xqP*SRp zU!uRRcO?_2BZc(o{`hIObkHGkU&G!MynDepCIM~LPGZ?1o4FV;)p_eV3klJS_!og? zNYYbAeQ`$!FGz~kC)EXGHC5wk+RLO>&|ZDka9$9VVJ_P5tID0$W;2&RP5+7PtJH&k>D4s| zVLE^Z!Ff7h=F0&uBi~obG@27_UqG;Yen>o2`XZhf_PD zZd8G;eVS%(1qF^Nvv)0Ycbu%CidLeG1ao$r?X2FFnpr^J6Gmsq?mQ7m%U{kF6T%hW z1i`UYuk~gv%ih`1R7Gj(S3BfH9mL^W5voHqR(}6^*l=(_QCvxGJ>{NBkC#2Ls{wn& zB}=_kYTmDLLMS-%s8pig;NKY(Vv1Sh%2Lavy}8pi#*{S zc(Q#C(54J6HP%gzMRYu?5lJtHZYf8C@f@xJhe@NmxP1-*-!SL(qEU#60qS^Th3LiNh~%Kqjm z$Tz0wBs7n~@BGnf^_XRy6^S>T85H~mla?gdvnHrOt-nX8Ha1uh3ei6*tOda&%U4lMUmc<8)7D1VA-(u)AZ{$C6X0-3y|5XPLUz2Xf)Ku`2dCMZ-V}iR zMP7pSz~8@MH;9?ODE0`Ra>)%uSlZNoUmhIg+iZ^Z(!ezUM0<|#+pE`2k)s#lWbolr)y^mnm5R!rB795G+z0NwG0LEk9np~r@?yf+H(S`=qefo}Vg9NT_2L zJ`;qJ0*GYe5zw6z-44d2bALna=TEV8A}g*m9$?9yp6(c3cQ6?D#eOvLA}tEpz<;d71=!#N|t?J4AR|)XNt|6_yo!4rb6ceW#pid0-HU zu1iN!mAaUMAh^NMm!=iHvE+$`U*@8UI-zM`F_ya zuSuj3L36^Upnx}U_N?4a&3N70$5-4_##i2>JOJZUI08Vo7`?klER5di0nKqq&-((9 zsB`G91v$BReF)1|wH|?}42}Q)3LT`mMraQ=2Y1lR1@d+=c0~m-6bnW5^MCy|?ssT$ zHu#895(G!n^tMHcxOJ|$ z@9H)mjoQT(#w3<>X7VpYq^vZk|D{S2r~@)Bf8wY(+xmpnVki+hd{Nb3FuzSFm%A{= zNx{$sV+xTU;FaX*zrVsET&STvH-@L%@lJuzflBkVN7;T?qbAw0xG`sk%a^zfwed!q6DVRFiz=%-**^!gmt6GX09qOhQ===h9b1Z>Iv0xK+LT$7qZ!DPQ4@aPm8#Hi_&JZ0XC#@|lo z@vSGsIL5$qkOCNoNL-n`l6wo92XTTuh6LxkZ=0X&{xckacL9UGb#tOO1-D}~lP<(+ zqDHt@P5lw1d_PiTFv7l_juB30T3mZT2}p4YVz-xX(}|oBm{E^_1(2N4d(X6OKcUN* ziD1*lMo4P(M%pi!gCxup@Pwmow!9}l`VmpnpKwTuv1)@9fD^4t+lY@d5}MU#XZ9#5 zR^Kyf+y2j|4Jr^yf$EGb87gGEirJ3q%}O_4fNdN)$2zs$IKSH@`oJC?-+*|c*>Dt4 z9JCdgHNB=LiB1#3tQ^t1r`L{|Q?N54uMj%O>Rn6+P9r&G#uJVADv8=L>dWc&h+fF~ zH7X(#tBE<7O#`9uNy?)YxhLd`ORTu=DSZ8}D+g9@*z~)N$!O=j;19vFaQRvnDwpgw zTUHwx{66-i6l2zS*OEo0?%e%UVv3^0_%|Ut%IyS+N19MCl1=tN4gZQQih35-R(cXn zhEyIIAKAYJ!afs}V~TnbxqWSkbXwx-oTS8sE8LfOYQbvvyX@av;veHjUOZ34e>@^r zQ2mLWrdp8`N44T-%(Ip&H)#uMoXp4>4rS^uW5{x$7G*t?y~ZHFUR%vfHop_9Qas+M zX16SHz{~#Q>HT=E@Oq5qSX3+@I!{ZopCxVXOZPV!pfbsb~ST27_D>nvf6Sjy*&)!nsdTLI|oscquf}fio}h z_)~=z`RM97bLQ&g+@Y9z$87)J{v`0-81=i=v#oY?OCh%f{V08<;*l@+1#xte4RjEZ zq!3z)zTZS8s#(@;gPrX|mdeq9gz;~l6=BumFvo|u0wBg+L^s7W{a;GDqHifdXYD!6 zpWsL+?|Lul{Rt!6>)Wo_|9u<$GjCvWhR(T*>wmLdNSve#DX literal 0 HcmV?d00001 diff --git a/docs/zh_cn/advanced_guides/index.rst b/docs/zh_cn/advanced_guides/index.rst index 9b6514961d..1faa4c57b3 100644 --- a/docs/zh_cn/advanced_guides/index.rst +++ b/docs/zh_cn/advanced_guides/index.rst @@ -1,18 +1,26 @@ +Datasets +************** + .. toctree:: :maxdepth: 1 - :caption: Datasets datasets/index.rst + +Supported Tasks +************** + .. toctree:: - :maxdepth: 1 - :caption: Supported Tasks + :maxdepth: 2 supported_tasks/index.rst +Customization +************** + .. toctree:: - :maxdepth: 1 + :maxdepth: 2 customize_dataset.md customize_models.md diff --git a/docs/zh_cn/api.rst b/docs/zh_cn/api.rst index 00153b9151..74b14c54f9 100644 --- a/docs/zh_cn/api.rst +++ b/docs/zh_cn/api.rst @@ -1,73 +1,76 @@ -mmdet3d.core +mmdet3d.apis -------------- +.. automodule:: mmdet3d.apis + :members: -anchor +mmdet3d.datasets +-------------- + +datasets ^^^^^^^^^^ -.. automodule:: mmdet3d.core.anchor +.. automodule:: mmdet3d.datasets :members: -bbox -^^^^^^^^^^ -.. automodule:: mmdet3d.core.bbox + +transforms +^^^^^^^^^^^^ +.. automodule:: mmdet3d.datasets.transforms :members: -evaluation +mmdet3d.engine +-------------- + +schedulers ^^^^^^^^^^ -.. automodule:: mmdet3d.core.evaluation +.. automodule:: mmdet3d.engine.schedulers :members: -visualizer -^^^^^^^^^^^^^^^ -.. automodule:: mmdet3d.core.visualizer - :members: +mmdet3d.evaluation +-------------- -voxel -^^^^^^^^^^^^^^^ -.. automodule:: mmdet3d.core.voxel +functional +^^^^^^^^^^ +.. automodule:: mmdet3d.engine.functional :members: -post_processing -^^^^^^^^^^^^^^^ -.. automodule:: mmdet3d.core.post_processing +metrics +^^^^^^^^^^ +.. automodule:: mmdet3d.engine.metrics :members: -mmdet3d.datasets ----------------- - -.. automodule:: mmdet3d.datasets - :members: mmdet3d.models -------------- -detectors -^^^^^^^^^^ -.. automodule:: mmdet3d.models.detectors - :members: - backbones ^^^^^^^^^^ .. automodule:: mmdet3d.models.backbones :members: -necks +data_preprocessors ^^^^^^^^^^ -.. automodule:: mmdet3d.models.necks +.. automodule:: mmdet3d.models.data_preprocessors :members: +decode_heads +^^^^^^^^^^^^ +.. automodule:: mmdet3d.models.decode_heads + :members: + + dense_heads ^^^^^^^^^^^^ .. automodule:: mmdet3d.models.dense_heads :members: -roi_heads +detectors ^^^^^^^^^^ -.. automodule:: mmdet3d.models.roi_heads +.. automodule:: mmdet3d.models.detectors :members: -fusion_layers -^^^^^^^^^^^^^ -.. automodule:: mmdet3d.models.fusion_layers +layers +^^^^^^^^^^ +.. automodule:: mmdet3d.models.layers :members: losses @@ -76,11 +79,74 @@ losses :members: middle_encoders -^^^^^^^^^^^^^^^ +^^^^^^^^^^^^ .. automodule:: mmdet3d.models.middle_encoders :members: -model_utils -^^^^^^^^^^^^^ -.. automodule:: mmdet3d.models.model_utils +necks +^^^^^^^^^^^^ +.. automodule:: mmdet3d.models.necks + :members: + +roi_heads +^^^^^^^^^^ +.. automodule:: mmdet3d.models.roi_heads + :members: + +segmentors +^^^^^^^^^^ +.. automodule:: mmdet3d.models.segmentors + :members: + +task_modules +^^^^^^^^^^ +.. automodule:: mmdet3d.models.task_modules + :members: + +test_time_augs +^^^^^^^^^^ +.. automodule:: mmdet3d.models.test_time_augs + :members: + +utils +^^^^^^^^^^ +.. automodule:: mmdet3d.models.utils + :members: + +voxel_encoders +^^^^^^^^^^ +.. automodule:: mmdet3d.models.voxel_encoders + :members: + +mmdet3d.structures +-------------- + +structures +^^^^^^^^^^ +.. automodule:: mmdet3d.structures + :members: + +bbox_3d +^^^^^^^^^^ +.. automodule:: mmdet3d.structures.bbox_3d + :members: + +ops +^^^^^^^^^^ +.. automodule:: mmdet3d.structures.ops + :members: + +points +^^^^^^^^^^ +.. automodule:: mmdet3d.structures.points + :members: + +mmdet3d.utils +-------------- +.. automodule::mmdet3d.utils + :members: + +mmdet3d.visulization +-------------- +.. automodule::mmdet3d.visulization :members: diff --git a/requirements/docs.txt b/requirements/docs.txt index a31b7716bb..5adbb4d475 100644 --- a/requirements/docs.txt +++ b/requirements/docs.txt @@ -1,5 +1,5 @@ docutils==0.16.0 -m2r +m2r==0.2.1 mistune==0.8.4 myst-parser -e git+https://github.com/open-mmlab/pytorch_sphinx_theme.git#egg=pytorch_sphinx_theme