From 22c3daff1966230f934d84355ed157cf8c36f4d3 Mon Sep 17 00:00:00 2001 From: Charlie Nash Date: Fri, 21 Aug 2020 14:53:44 +0100 Subject: [PATCH] Adds PolyGen to public Deepmind Research Github repository PiperOrigin-RevId: 327802622 --- README.md | 2 + polygen/README.md | 65 ++ polygen/data_utils.py | 409 ++++++++ polygen/media/example_samples.png | Bin 0 -> 287553 bytes polygen/meshes/cone.obj | 66 ++ polygen/meshes/cube.obj | 14 + polygen/meshes/cylinder.obj | 98 ++ polygen/meshes/icosphere.obj | 122 +++ polygen/model_test.py | 159 +++ polygen/modules.py | 1506 +++++++++++++++++++++++++++++ polygen/run.sh | 20 + polygen/sample-pretrained.ipynb | 294 ++++++ polygen/setup.py | 40 + polygen/training.ipynb | 328 +++++++ 14 files changed, 3123 insertions(+) create mode 100644 polygen/README.md create mode 100644 polygen/data_utils.py create mode 100644 polygen/media/example_samples.png create mode 100644 polygen/meshes/cone.obj create mode 100644 polygen/meshes/cube.obj create mode 100644 polygen/meshes/cylinder.obj create mode 100644 polygen/meshes/icosphere.obj create mode 100644 polygen/model_test.py create mode 100644 polygen/modules.py create mode 100644 polygen/run.sh create mode 100644 polygen/sample-pretrained.ipynb create mode 100644 polygen/setup.py create mode 100644 polygen/training.ipynb diff --git a/README.md b/README.md index ada23e1..3268d62 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,8 @@ https://deepmind.com/research/publications/ * [Graph Matching Networks for Learning the Similarity of Graph Structured Objects](graph_matching_networks), ICML 2019 * [REGAL: Transfer Learning for Fast Optimization of Computation Graphs](regal) +* [PolyGen: PolyGen: An Autoregressive Generative Model of 3D Meshes](polygen), ICML 2020 + ## Disclaimer diff --git a/polygen/README.md b/polygen/README.md new file mode 100644 index 0000000..2186591 --- /dev/null +++ b/polygen/README.md @@ -0,0 +1,65 @@ +# PolyGen: An Autoregressive Generative Model of 3D Meshes + +![](media/example_samples.png) + +This package provides an implementation of PolyGen as described in: + +> **PolyGen: An Autoregressive Generative Model of 3D Meshes**, *Charlie Nash, Yaroslav Ganin, S. M. Ali Eslami, Peter W. Battaglia*, ICML, 2020. ([abs](https://arxiv.org/abs/2002.10880)) + +PolyGen is a generative model of 3D meshes that sequentially outputs mesh +vertices and faces. PolyGen consists of two parts: A vertex model, that +unconditionally models mesh vertices, and a face model, that models the mesh +faces conditioned on input vertices. The vertex model uses a masked Transformer +decoder to express a distribution over the vertex sequences. For the face model +we combine Transformers with [pointer networks](https://arxiv.org/abs/1506.03134) +to express a distribution over variable length vertex sequences. + +In this repository we provide model code in `modules.py`, as well as data +processing utilities in `data_utils.py`. We also provide Colabs that demo +training PolyGen from scratch on a toy dataset, as well as sampling from a +pre-trained model. + +There are some minor differences between this implementation and the paper: +* We add global information (e.g. class label embeddings) as an additional input in the first sequence position rather than project it at each layer. This reduces parameters, but does not significantly impact performance. +* We use [ReZero](https://arxiv.org/abs/2003.04887) which improves training speed. +* We train with only shifting augmentations, which we find to be as effective as the combination of augmentations described in the paper. This helps to simplify the data pre-processing pipeline. + +## Training Colab [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepmind/deepmind-research/blob/master/polygen/training.ipynb) + +To train a PolyGen model from scratch on a collection of simple meshes use this +colab. This demonstrates the data pre-processing required to create inputs for +the vertex and face models. + +## Sampling pre-trained model Colab [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepmind/deepmind-research/blob/master/polygen/sample-pretrained.ipynb) + +To sample a model pre-trained on [ShapeNet](https://www.shapenet.org/) +use this colab. The model is class-conditional, and is trained on longer +sequence lengths than those described in the paper. This colab uses the +following checkpoints: ([Google Cloud Storage +bucket](https://console.cloud.google.com/storage/browser/deepmind-research-polygen)). + +## Installation + +To install the package locally run: +```bash +git clone https://github.com/deepmind/deepmind-research.git . +cd deepmind-research/polygen +pip install -e . +``` + +## Giving Credit + +If you use this code in your work, we ask you to cite this paper: + +``` +@article{nash2020polygen, + author={Charlie Nash and Yaroslav Ganin and S. M. Ali Eslami and Peter W. Battaglia}, + title={PolyGen: An Autoregressive Generative Model of 3D Meshes}, + journal={ICML}, + year={2020} +} +``` + +## Disclaimer + +This is not an official Google product. diff --git a/polygen/data_utils.py b/polygen/data_utils.py new file mode 100644 index 0000000..1450d40 --- /dev/null +++ b/polygen/data_utils.py @@ -0,0 +1,409 @@ +# Copyright 2020 Deepmind Technologies Limited. +# +# 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. + +"""Mesh data utilities.""" +import matplotlib.pyplot as plt +import modules +from mpl_toolkits import mplot3d # pylint: disable=unused-import +from mpl_toolkits.mplot3d.art3d import Poly3DCollection +import networkx as nx +import numpy as np +import six +from six.moves import range +import tensorflow.compat.v1 as tf +import tensorflow_probability as tfp +tfd = tfp.distributions + + +def random_shift(vertices, shift_factor=0.25): + """Apply random shift to vertices.""" + max_shift_pos = tf.cast(255 - tf.reduce_max(vertices, axis=0), tf.float32) + max_shift_pos = tf.maximum(max_shift_pos, 1e-9) + + max_shift_neg = tf.cast(tf.reduce_min(vertices, axis=0), tf.float32) + max_shift_neg = tf.maximum(max_shift_neg, 1e-9) + + shift = tfd.TruncatedNormal( + tf.zeros([1, 3]), shift_factor*255, -max_shift_neg, + max_shift_pos).sample() + shift = tf.cast(shift, tf.int32) + vertices += shift + return vertices + + +def make_vertex_model_dataset(ds, apply_random_shift=False): + """Prepare dataset for vertex model training.""" + def _vertex_model_map_fn(example): + vertices = example['vertices'] + + # Randomly shift vertices + if apply_random_shift: + vertices = random_shift(vertices) + + # Re-order vertex coordinates as (z, y, x). + vertices_permuted = tf.stack( + [vertices[:, 2], vertices[:, 1], vertices[:, 0]], axis=-1) + + # Flatten quantized vertices, reindex starting from 1, and pad with a + # zero stopping token. + vertices_flat = tf.reshape(vertices_permuted, [-1]) + example['vertices_flat'] = tf.pad(vertices_flat + 1, [[0, 1]]) + + # Create mask to indicate valid tokens after padding and batching. + example['vertices_flat_mask'] = tf.ones_like( + example['vertices_flat'], dtype=tf.float32) + return example + return ds.map(_vertex_model_map_fn) + + +def make_face_model_dataset( + ds, apply_random_shift=False, shuffle_vertices=True, quantization_bits=8): + """Prepare dataset for face model training.""" + def _face_model_map_fn(example): + vertices = example['vertices'] + + # Randomly shift vertices + if apply_random_shift: + vertices = random_shift(vertices) + example['num_vertices'] = tf.shape(vertices)[0] + + # Optionally shuffle vertices and re-order faces to match + if shuffle_vertices: + permutation = tf.random_shuffle(tf.range(example['num_vertices'])) + vertices = tf.gather(vertices, permutation) + face_permutation = tf.concat( + [tf.constant([0, 1], dtype=tf.int32), tf.argsort(permutation) + 2], + axis=0) + example['faces'] = tf.cast( + tf.gather(face_permutation, example['faces']), tf.int64) + + # Vertices are quantized. So convert to floats for input to face model + example['vertices'] = modules.dequantize_verts(vertices, quantization_bits) + example['vertices_mask'] = tf.ones_like( + example['vertices'][Ellipsis, 0], dtype=tf.float32) + example['faces_mask'] = tf.ones_like(example['faces'], dtype=tf.float32) + return example + return ds.map(_face_model_map_fn) + + +def read_obj(obj_path): + """Read vertices and faces from .obj file.""" + vertex_list = [] + flat_vertices_list = [] + flat_vertices_indices = {} + flat_triangles = [] + + with open(obj_path) as obj_file: + for line in obj_file: + tokens = line.split() + if not tokens: + continue + line_type = tokens[0] + # We skip lines not starting with v or f. + if line_type == 'v': + vertex_list.append([float(x) for x in tokens[1:]]) + elif line_type == 'f': + triangle = [] + for i in range(len(tokens) - 1): + vertex_name = tokens[i + 1] + if vertex_name in flat_vertices_indices: + triangle.append(flat_vertices_indices[vertex_name]) + continue + flat_vertex = [] + for index in six.ensure_str(vertex_name).split('/'): + if not index: + continue + # obj triangle indices are 1 indexed, so subtract 1 here. + flat_vertex += vertex_list[int(index) - 1] + flat_vertex_index = len(flat_vertices_list) + flat_vertices_list.append(flat_vertex) + flat_vertices_indices[vertex_name] = flat_vertex_index + triangle.append(flat_vertex_index) + flat_triangles.append(triangle) + + return np.array(flat_vertices_list, dtype=np.float32), flat_triangles + + +def write_obj(vertices, faces, file_path, transpose=True, scale=1.): + """Write vertices and faces to obj.""" + if transpose: + vertices = vertices[:, [1, 2, 0]] + vertices *= scale + if faces is not None: + if min(min(faces)) == 0: + f_add = 1 + else: + f_add = 0 + with open(file_path, 'w') as f: + for v in vertices: + f.write('v {} {} {}\n'.format(v[0], v[1], v[2])) + for face in faces: + line = 'f' + for i in face: + line += ' {}'.format(i + f_add) + line += '\n' + f.write(line) + + +def quantize_verts(verts, n_bits=8): + """Convert vertices in [-1., 1.] to discrete values in [0, n_bits**2 - 1].""" + min_range = -0.5 + max_range = 0.5 + range_quantize = 2**n_bits - 1 + verts_quantize = (verts - min_range) * range_quantize / ( + max_range - min_range) + return verts_quantize.astype('int32') + + +def dequantize_verts(verts, n_bits=8, add_noise=False): + """Convert quantized vertices to floats.""" + min_range = -0.5 + max_range = 0.5 + range_quantize = 2**n_bits - 1 + verts = verts.astype('float32') + verts = verts * (max_range - min_range) / range_quantize + min_range + if add_noise: + verts += np.random.uniform(size=verts.shape) * (1 / range_quantize) + return verts + + +def face_to_cycles(face): + """Find cycles in face.""" + g = nx.Graph() + for v in range(len(face) - 1): + g.add_edge(face[v], face[v + 1]) + g.add_edge(face[-1], face[0]) + return list(nx.cycle_basis(g)) + + +def flatten_faces(faces): + """Converts from list of faces to flat face array with stopping indices.""" + if not faces: + return np.array([0]) + else: + l = [f + [-1] for f in faces[:-1]] + l += [faces[-1] + [-2]] + return np.array([item for sublist in l for item in sublist]) + 2 # pylint: disable=g-complex-comprehension + + +def unflatten_faces(flat_faces): + """Converts from flat face sequence to a list of separate faces.""" + def group(seq): + g = [] + for el in seq: + if el == 0 or el == -1: + yield g + g = [] + else: + g.append(el - 1) + yield g + outputs = list(group(flat_faces - 1))[:-1] + # Remove empty faces + return [o for o in outputs if len(o) > 2] + + +def center_vertices(vertices): + """Translate the vertices so that bounding box is centered at zero.""" + vert_min = vertices.min(axis=0) + vert_max = vertices.max(axis=0) + vert_center = 0.5 * (vert_min + vert_max) + return vertices - vert_center + + +def normalize_vertices_scale(vertices): + """Scale the vertices so that the long diagonal of the bounding box is one.""" + vert_min = vertices.min(axis=0) + vert_max = vertices.max(axis=0) + extents = vert_max - vert_min + scale = np.sqrt(np.sum(extents**2)) + return vertices / scale + + +def quantize_process_mesh(vertices, faces, tris=None, quantization_bits=8): + """Quantize vertices, remove resulting duplicates and reindex faces.""" + vertices = quantize_verts(vertices, quantization_bits) + vertices, inv = np.unique(vertices, axis=0, return_inverse=True) + + # Sort vertices by z then y then x. + sort_inds = np.lexsort(vertices.T) + vertices = vertices[sort_inds] + + # Re-index faces and tris to re-ordered vertices. + faces = [np.argsort(sort_inds)[inv[f]] for f in faces] + if tris is not None: + tris = np.array([np.argsort(sort_inds)[inv[t]] for t in tris]) + + # Merging duplicate vertices and re-indexing the faces causes some faces to + # contain loops (e.g [2, 3, 5, 2, 4]). Split these faces into distinct + # sub-faces. + sub_faces = [] + for f in faces: + cliques = face_to_cycles(f) + for c in cliques: + c_length = len(c) + # Only append faces with more than two verts. + if c_length > 2: + d = np.argmin(c) + # Cyclically permute faces just that first index is the smallest. + sub_faces.append([c[(d + i) % c_length] for i in range(c_length)]) + faces = sub_faces + if tris is not None: + tris = np.array([v for v in tris if len(set(v)) == len(v)]) + + # Sort faces by lowest vertex indices. If two faces have the same lowest + # index then sort by next lowest and so on. + faces.sort(key=lambda f: tuple(sorted(f))) + if tris is not None: + tris = tris.tolist() + tris.sort(key=lambda f: tuple(sorted(f))) + tris = np.array(tris) + + # After removing degenerate faces some vertices are now unreferenced. + # Remove these. + num_verts = vertices.shape[0] + vert_connected = np.equal( + np.arange(num_verts)[:, None], np.hstack(faces)[None]).any(axis=-1) + vertices = vertices[vert_connected] + + # Re-index faces and tris to re-ordered vertices. + vert_indices = ( + np.arange(num_verts) - np.cumsum(1 - vert_connected.astype('int'))) + faces = [vert_indices[f].tolist() for f in faces] + if tris is not None: + tris = np.array([vert_indices[t].tolist() for t in tris]) + + return vertices, faces, tris + + +def load_process_mesh(mesh_obj_path, quantization_bits=8): + """Load obj file and process.""" + # Load mesh + vertices, faces = read_obj(mesh_obj_path) + + # Transpose so that z-axis is vertical. + vertices = vertices[:, [2, 0, 1]] + + # Translate the vertices so that bounding box is centered at zero. + vertices = center_vertices(vertices) + + # Scale the vertices so that the long diagonal of the bounding box is equal + # to one. + vertices = normalize_vertices_scale(vertices) + + # Quantize and sort vertices, remove resulting duplicates, sort and reindex + # faces. + vertices, faces, _ = quantize_process_mesh( + vertices, faces, quantization_bits=quantization_bits) + + # Flatten faces and add 'new face' = 1 and 'stop' = 0 tokens. + faces = flatten_faces(faces) + + # Discard degenerate meshes without faces. + return { + 'vertices': vertices, + 'faces': faces, + } + + +def plot_meshes(mesh_list, + ax_lims=0.3, + fig_size=4, + el=30, + rot_start=120, + vert_size=10, + vert_alpha=0.75, + n_cols=4): + """Plots mesh data using matplotlib.""" + + n_plot = len(mesh_list) + n_cols = np.minimum(n_plot, n_cols) + n_rows = np.ceil(n_plot / n_cols).astype('int') + fig = plt.figure(figsize=(fig_size * n_cols, fig_size * n_rows)) + for p_inc, mesh in enumerate(mesh_list): + + for key in [ + 'vertices', 'faces', 'vertices_conditional', 'pointcloud', 'class_name' + ]: + if key not in list(mesh.keys()): + mesh[key] = None + + ax = fig.add_subplot(n_rows, n_cols, p_inc + 1, projection='3d') + + if mesh['faces'] is not None: + if mesh['vertices_conditional'] is not None: + face_verts = np.concatenate( + [mesh['vertices_conditional'], mesh['vertices']], axis=0) + else: + face_verts = mesh['vertices'] + collection = [] + for f in mesh['faces']: + collection.append(face_verts[f]) + plt_mesh = Poly3DCollection(collection) + plt_mesh.set_edgecolor((0., 0., 0., 0.3)) + plt_mesh.set_facecolor((1, 0, 0, 0.2)) + ax.add_collection3d(plt_mesh) + + if mesh['vertices'] is not None: + ax.scatter3D( + mesh['vertices'][:, 0], + mesh['vertices'][:, 1], + mesh['vertices'][:, 2], + lw=0., + s=vert_size, + c='g', + alpha=vert_alpha) + + if mesh['vertices_conditional'] is not None: + ax.scatter3D( + mesh['vertices_conditional'][:, 0], + mesh['vertices_conditional'][:, 1], + mesh['vertices_conditional'][:, 2], + lw=0., + s=vert_size, + c='b', + alpha=vert_alpha) + + if mesh['pointcloud'] is not None: + ax.scatter3D( + mesh['pointcloud'][:, 0], + mesh['pointcloud'][:, 1], + mesh['pointcloud'][:, 2], + lw=0., + s=2.5 * vert_size, + c='b', + alpha=1.) + + ax.set_xlim(-ax_lims, ax_lims) + ax.set_ylim(-ax_lims, ax_lims) + ax.set_zlim(-ax_lims, ax_lims) + + ax.view_init(el, rot_start) + + display_string = '' + if mesh['faces'] is not None: + display_string += 'Num. faces: {}\n'.format(len(collection)) + if mesh['vertices'] is not None: + num_verts = mesh['vertices'].shape[0] + if mesh['vertices_conditional'] is not None: + num_verts += mesh['vertices_conditional'].shape[0] + display_string += 'Num. verts: {}\n'.format(num_verts) + if mesh['class_name'] is not None: + display_string += 'Synset: {}'.format(mesh['class_name']) + if mesh['pointcloud'] is not None: + display_string += 'Num. pointcloud: {}\n'.format( + mesh['pointcloud'].shape[0]) + ax.text2D(0.05, 0.8, display_string, transform=ax.transAxes) + plt.subplots_adjust( + left=0., right=1., bottom=0., top=1., wspace=0.025, hspace=0.025) + plt.show() diff --git a/polygen/media/example_samples.png b/polygen/media/example_samples.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc67782e46e0fd61839a202b628bd10a4cccb54 GIT binary patch literal 287553 zcmbSyWmlWu6Kx>47cEXpk>V08NRbwb1ZZ)0hoHfVL!m&C3KW+j!QI^prAP?`4ek^T z6o*TH|GVx7xaUpQ^JFFK%$hSZd+(VOt*Nd=Oh88f004-UU%z|{001Qb089`b*29~x zC;S%=A6RyB5IF##I)U)U0{h{a#p?B22ms*E4giEi0037HuR^u~0GI#(uxkzgfKvbf z8n=v=H&PE@U|Omwy#(AxCH(4qc*6BkhP=XE$HW41V^`gWv_1R~p!`x!+js8IZScne zJ8$NTz_D|QL(gpgz5V&d(%6x#EZf?sRX0u&JJ4rdgJhdm$$F+n-s|=4Zf*3H(;tHW zfJ1?0wQ?cr30Qb1dUr$2gsgZ~ay9h6pUiz~4Q8S(oOo5~j81%=6E=RQtlq4ig3?E9 zYg?}VmNzb5w{1yq1TQ>Q(q|cpsC!wz83drlPt-Ai?VV)38}-cc3~B%WSnvt-&FG83 z4CYPl{fBk?myP*M>_`%YzDa&j86p5;p?jvFAXj8xWNmG4{T1~hH)Y_l6K%oOvneHA zwGeIJrpF9;3$+PXTXXaC^Vj!FGV1}a8}a$7bkFk(pMnnb~3mHyVnNiC%+o|rw@=i02ibLB(A6~@fJ z|E<_jx+Rv9hC0c5Sm&M!=5%`9tmFOA@2{PA8WbNOrY-ecwj_0>KxSeS5B$j{?HUw zG+524y&BYGm$=b+D1(GG`K#7$K=f$gB7c$H{*{amfN=? z%{p#<2+h7_%d`t0qB9=61|K;0N=DPZZn`cw0k_ukSr+=k=2G%^dpv*pd;@ zt&JgTJW>nD!ALOk%_+O3S2A0fRH-Q}9u3zQYbkVS#eD11%*T8?b~ki}m_K%vLNmAT zUt4AV+fx6z+F7@c@46h^Ri+_&op*;2ev``$jhn4H-4-q;HCqK!1gj+e^34kCp_|_y zo+(W|0>;L;tKU+5bx#lo3(|zzSHa@?Z1Ab z4}Q{G_3?e!nWjaV_(k0O^xCTcHE2Jvaj(z@r?jyDsi|*>0_EXMu5XRd#OEzyu`-9B zhZVsy6}&HkZ_tJ?g_`8JCO}#S34wg>EC&OM*_gvhHnC){drpX$4@p4AhDUa)YoGfT zJ2%V0)E>2NU|gc${Dx}fS94^HoyGxQJ^fbhY%Stko7RD(F5Msd!EtraOr#@9k^xq} zw)(OZ3Hlt7hCWMp(GheyvSo%=qfkgDAT~r2^MbZXR4HELx;)q6bc0dh$|KfQD2Cx- zqIkwy#QUPi*mp}VhAYqTNJsX(>FEsA7_8%XHd95<%X<9W)co8DV8rc_G@H{nH%7-k z6Ef?6_V=aPf^Z`;wuCv^bes65k1PW)r#Ema8+EwKDXn>C*M#^iWDf~>2Bi4Zn@!u= z#ZB&)FHVy9rSG%xcTiXmzAU(Tk$RTHYM8FPR-y8fzNg_iG)P@9HCwhp6~cX_fSqs2 zYA!^sNtVpnU_qtCB?O3?6XskbDCOoAVj=Qyv^ij0&FBl!W{t(b5P+;={vbNmwk5{2 zxdxJUURLjG)X}Vo^t{+L>-jGtSBi-w8aWMA9%8W3T~+2$qq|9k60^hxkbmy_vnqpS zS15ntkASp+yZM$Ojwo0AeMcr5`ll=Oy{D^3>$`?U>ELY~$5)^eODpV%F$J-hXn36P z)VR5CNfvfbn?tihN$zU0LF06;sVvg3*h=VFH=iJbN@QAwz2UXi#Xt%SwVuKKE^-63RYYKdnpyv499OZGqUAz?3QK7E_6kG2-K(nt05vM+9|G+12yH zLGELomFX>Bm}nL)M#s(}r_moLYo<;TmnmawROtP2F9gCaLT1QFzw?0jjNb;h$&=i+ zX$@)h*R9hX;WMSe(;a{}3S88pWQJzv=ijN^h>}W-QP6Q$ta`U`We=2k2qzDI^GLwZ zbHk4kKeCK1E=A46p~AymebPPdm$mm#Hzb2sCfaF&t4nhuSUu9(@LIn3kX;5 zt(dx4xo@?wF?4-3mx&4q2r$iuheF5A(~QeCM8<1;we&t31)ocF@cg~-WpHHD+f%jc z6?OGWZ`{bwZW^((7rR-)z)YedWN5-*sX+iUeH7L3+PatBnqW%}F-2+M0xstxA(YZl?0zsXsYSczcE_ADv?Acwu$ZEjz5G3%KNX7ijdJf5hV zuVdiC!vtd+WXcw$_!cEejNO8?QGYe!2Ub>U6ZGs_XcuL`TDQl?KN>Rdbf1l9+b`D; zFB=P8%<^{B3mY^gmGwf>sY{F)5%a3tog~GY4JK-bl$-5v4gEr#88{GKdoy*SIW<#NtM45AN!CXy~jp1ffm+fOos zdh%94u1}y+N5C<4ocKTQzX%mqibk#V@MQ*U)ZS0U2A?{;I2IdbkHcTOD}EQey}Orv zxpxY>UCX|_DNlHDu`tG%)n!!uT|~!jIALbG*$XhKf(^iB&Z=Do2z7s{@0p{8bWtmQ zL(>Pm%ij8zxTs`K646rK+Z%ZN%Q`nKrqSu*qY`<&I#S_QX5X1fk(YG=rJa%s(o!aB zhRiqHSLdYOLpve%bX#ofnPkd=(0Zoo(@$gl7fGVUzd zVQUz@R=YCv+d$&-qIKA{-R=95F?c`eAZfQN*M`4IC~$W@^$RzLS?jH;SkOsa_GKm2 z(v3p8UdQ46UZ3mV_=(7p|>SV@q zBH+6c;{rB@-xwdNOAbB%0j8d=UDGn;elR%te>EiG&(y9&!RllF<*AFhHgf)-)s7Ru z&Y!Fd7VlNlYxqd1UAGV`PQ$o1zrGat3uHHYQ=R@wn?_I2N|%;)t*BA@yfr~nX0aP; za-`582a~mI*o+&0pcJLDamt$vv*O`*&SyshLsPgvT+JkZizRT4?yyA79SgoV$d>jy zaGG9vjBHPW1*a)lm?AokYP0XZh^cqpA8IHi1TEZ{b5U@xK;-tM=_6Vt!Qe>I0))IA zd;{N8!>RoON+LJzN!R}+nt%@LNMcxfs-BsmFFXw7f-7(}xMMO-6GHp=n#a!7^|1KJ zh`}R^^@AL=f9s;xmkqi~r(0#Jck#HwawAZBfng!tbX)yS@rYf1g43(jcreID z!Ms4X;t*ee@P{k+h5MrHSN|6fe1AB#hZiHJ&{drqfgno$VUZQ`Z&f`a3_BLmQd7sv zBXW3 z!Li`XASxKp8ar_E{lcvxn1yIw|+ZF+F4fi*b!HnenFXCVb-Fd zU#T^GrgGlIIPpi;I88>GZ(H%O6&L+k$GArJ7cEf?Y{0Rdii`{CWf5nznZ4J=FrPnVgmV8&3WjxQ1KvTxkN}X5Cd}nJ*gH|P@Il`bxe+6Fvi#G(@ zPl)QnbOGt8)Wl}D|8ZL(_LfeXJaDy)SlFN+E2}@EA{WI;LXHp7I#6ut!EYki#KgpB zoX|$+Gp0ybIH#J&eRrbobL3BwVTRg;Aleh|WTCDP$GP<+{lf7q!}5dC#haU;%TG-yHy=4PsR+Svu^|3H%YkOB-vNnUAEV%>`*(Sk_ z3+EIs#SKyyo8OXnIM^DoOJ5T`zf7!Q-&ou{@)LOg2z)1LI*d#VZOvCxrJde?hg|Op z)`I=^xaFarLS8Rof4K~ce2Kfs#H8OQX{MqTBqW_@=O&32hB645B4lCbbE8s4K&3vG z?ledRY&d1VyVbh)y`J11j^fnpFq)#jf4&{{ZQR znZw|$2=21Y4dor4Xw$D+*hBf#2{YvbGDg>xNnd3Ve)bRPd~%)Z{;7mHV~_Z_oy zH@$D~4BR^#_PM6W)%6{g&5FSW4jHVdGqyKP7{eSL&57SX!8IgVhvZJ@>WC& zGI*6FeTl5YkAXjbOokhh6OUm>$0#pLL^tQ}et_fUNGI7y{*&N?Bu0x}le%0~UbnmX zABayaX<9?ZE+3%Bh@_TEs^!*j`XBup>inL_3V>D|5d^)xW09d(>Y;+Jt~FT@O8XxD zS!%f{A3mqV_Y!nJ@6WSF+e{y*ef~1A8BG~WgtbSWNN0^5@^YL+%LUhRRaUb|i!KvW zysG1FeY>2dDK-pfI7_mZcg^2^S8Uem=X#dH%6~oh z;wo*A$L>8kPDd z*ju~|q1nV~*y|*bnK;A*KHe6a(>R(BcSms#_K^te=nhpSLzc@4HkH@a5YSW0)K;7f z)bbka9LRmQneM`*o$Ut>8Hf8JJcKgKuwZL`rr_2{DOZeT-X%Nmzfg`MW%MAIDZF@d zxzwlejA8lJy?9nV_mXi(!`1H8bPPmH^o5Jwcc1XRmxQitkaDjC4F1bc{9XhAhdsuS z^;pHZZiQpn^F9(*&$cGM9mvj5Z^JOhG}ByrdhmJhaomQajm6kU{;Ys2r^bUtzm*r) zxl3r$&U>^2X5Vo1dPMZ6{x+KIcXVX0wRqZn#|RWjA{u_p#Q|nq(nhIHSD#@zq+M$p zrLG(;Cc&mh|I86^+Xo8e_!TwTi96M>v{T8l^VfpCz5^?|2YWys1WC_1i^BgHc8OI$ z{C;B*gNasiS62&N#?Pek2}*CF79!mQjiXi4WZwcK|1q`63(Y4=iAU8=$9l(GYqmWc z#|HNow^J{SZm)ie@nz!WS{lLpZK<5t;?T0;vt3+@wL)eql-r}y(XW*1ex(5-apW7n zVY~5z8?vbI^i!|I%=~UQ%x?SkhPB#bG?wlsGt+&tE(dl^_3B51729nx!)8PnTV=(+ z=>k|FUcQv_T(bdu;1+gL8)6vFN_X!gY<9)S$VfsgFeA$oNLD>~ipK}eJEn@%OlwYr zwpU#v*;eT}+9Pr^Ge}6w-yDbFb;kwUBsGi(OHqVILf0g=(=?2VvA0FbK?U=P1NzNATam9%BLfHj(OScR zu0+*Rt`BGW@dlY7F^CX#Wx`#%8!;~{xlL0>tnoJZ> z{StoEZej8!{psvLEZuEPdOESv%DX}S`y;)0=5HDqccJ|E2WEaZC&4$B<+~dcY5K$9 zX3RRy2q1|@{l;L+z;EjAwgwqc_GE#&X<5iO^>t32vDS}I@w~K#F^UfW3}mqx1G2Js zOcl2&c}-uK4(7^@G;qTV>2p!++D>iXlpTg+&y3}1oa9XK``Q2~@QlBndrGa9*aR$w zA;QBk#vxJ?1Mg(LdBa?Yf4N(kaWgjq8YNL{*bNrow|rs`z3!R&Cz`DR-!p`XU*%o~ z4`-9LM`j;s-0gDQ>ApLdADiOtetlUjJXt5{6sy_tDUr^At7^~13PLrdjB8=qgJB{2 zappbiiZP(NS*q!FIQR&i{Z5sCnz`e=xAWwtl8>3Za%tN+-3STcT*fj8)z0+9k7*4H zv3vFRXkUdxoBjh*l7uOXS?t&4(Am^2sCkwQYwNQkr<1#t_3@yafPsLsdst9t8+G1( zOhm&=8)6$2AI5a@7ux>$&-EMTjSgJShJ<8DAznzu)^zB;ilZjH0{W@!kyk-M_1`#M z<5yNbjM@tQ4xXc02sG=HvcFy^aR-@a+hCVX_VJc6_rHJtW>GV9u0I1@tZ4)}M&|s` zyIucTd0*VyTko-~!K{Ai-l;Bfd?Z)273m_;>EX8YgbB+~9S>4ZzgNOX$`mqcje!h# zsimt&_fa?My7BHe^Tkam>4|6Z#dXIq$DKy0Bw9AF8EiMI;Dg0m9Sg(ANaK%+;t8#S_sucC z({^z*@ub2-psSX_MRtICCfdvux2C-n>EpKJ2^YiYVzdjteW34fa(Luyy=~Y_S(a9< zoCOapa9ORU&y$A|B1?q+oauYfQPuE}-Rdqv-q+Kj@)RU>E)=BtP8o_)x{dGqetyLb zvd`o%z1Y|Z@LM*!ZmeiylPa@m^HO0bt7Vg7qRT3?22Q+DFjB8~ko|ffapRPI+4G~* z?VU-`80x;8fA@FrmGCE0(HwP%w2uyLVoN%vd0I&lC>k5ClSoaFP)095D7c*}@|Z2v z4jH1}BalV|w>u~?;KSQ@HnK;vP;=ps7Vfs|_go5&_@~(nt@ac?unFum+|NT5-MJb` zn*{koS0LDH_3cTOE*y+R4QF%d&dqH#4uKRNP4u7T?~YXBL=eUt-$~A5`4wGrO(5uT z5}DUlQmDy6Q{zAV?IPsK7JHz!X=(80i}uU2v*W*RqX{qWoL-zkf-jv)t2c3nT`Del zq38^a`tO~LjdlbP!Z=-|nVOKhU%{Gxe9NU4jMGT6DEHt&wMDTbO;-VzXB)z$OJ@VY zTZhK?yDK~NFHoU-M}=Nbjg{(4a#62;VLQ{>vl&FyPC;>tW-1;@xEn_IdN~_3NiM+I zdh6iBIUkkfY~J}Q2^on9hmW)q-7~FvHF#>wD_3Xq z-$bG&i|md6bY2r zI;O1zE@Wd~uCJV#?8Dsbnzo+%yoMPTaN$uAgn(3_eoPrf4vrE+<6j@Lpfn;(j&TPe zd(J?)bi31f<`Lyb=+7z^rP=CY5|9lUVHoZ>rfgYT_Ed<%Hn8gCHRjiOf3MUW z8vJ9TDgn#!B9*7+r}^SKZsy-^QWv(Kz!84tE~$B$Gj881ueO42=k`8X)K5PbNOHjl zx~mMh-5k4Nj>OH%E>jyD-YhCjpE3w?ThlYWTswc!+|uHAkWG;b(uB9QiiLYYam!vR zRbmLPTj#FG9rq7d;CUeya7_$=iYZ%FAe?ScJy8stXEFJ~pqVS(DhCx+E3~eGHTim6 z(vhZKB2q`mq=298UDkv1Gv9D@Fd>9 zAuev{D4ww#p$kNSM#4kze54<9NOs&GyqUn(blE1NG}A7w7|V|54_e9$V(rQVlqR_y zyZgG`oZU|y?@)2HZ5x(R8K&7AQNdq{k=B78X+ir5c*!25MH}&|$Dv?6bFe&i7&^(k z(VqCBcVgg}MzrGcI%%{;9A5(`f}KKrR;7u1Ql+HAK?U|^?1?C8Yb}kvx!8)V@mGCq z42aZ%htOnl`3Ixt94V9Sohei!{rHI*3MSZ5r1aPI+UhH{h03WVdzS6opC7H(o0V%7nR;jXF4Q}aj)U-**Xob;$KzUOopRUCWEm%3 zhrfF?x%hK(jO@@u48NuNd4`%B57#3a?v)TIxs?l>!D1J^LO&Lo?TsP!xlR2)p3;X) zB!MMrNqp8NB7TlaY1lDt`)p6EHWkR%z5f=z9uMk<{bBbl!Q@`Wnjz!bb{tP(C-d@R z2j~43F5Lj_6y<6EZo`kk&KwOW!8=g*Gj`bd{#*~1CdU|O@;U*Q8-2qHJI~@Ur95&EB2{#IB^$ISB$R^V?U-}o#m?#g7c@&vc#{2 zfW{8jA^*^L-G%HE4uEgmT-6A;u$Ue_6SwkHQ{Ch}_FF0}nmuS3s}Z%n*}F91loE9l zn2Rc-kvG7xIOctfRx2HWi!|Oo51NMffg?R6whOfS_TZol&d^DxiQa9lZLW6FQ!d$rsm>r&Es_LOjj3l zlvyRdnhai8t+1-F7a1EN&U z8}-gTLX?KEaUsT63^S~%|2a22S?;kKnOZ&2c)K1v=qB!x-(JNvTpI7x@ zrd~Thbn=Qhr?hstLs7c!@aiWMjA7#ojPd<>+@j#+&86Bkr!>nq|V#e6xAy#yr7 z;0vOzfyY>CLF8DmFd7l=_eClJOh6}@{;nR!-EP>hpW<^SO`1NKbV_jYWX0sWVdJM= z2|OmL?O!!i)5&{WEKDWz<%IK_e&d2g>F3l%Q+GG7i2(grvRb;>`q#+4e5-YB2T<{m z^|QyjL>rWNHSAXVB>?s;_C)rqlC2!|ij}xH43;>zt|Zt&{VrA=k+8Zd2PauJu7JmI zsAjQx>LjJf`@^ffmU=sk#2moTa>f^l5KVt>{Mud4iuCQ!e&uj_758F1g3$17I^f&DCyILm&H?wWH0ScJsUp?Xzfs*CN&SI|Wv>=Q z0OAVRmZv#gLV$3E_uVYS`5Phv#E@_~JA0v~cw8ro{qWT?x3N)_de)IPFjjCpCehYF zt;}ZHI=47X{RyP(xfEp8g;pRF$FmCE*RQBlMP)}Xh0CTu4|sEkQN2$Fa>O<|E@NG& zw=wkHyJ2a*ur&LR>pBK3Cx$;~H@}(ro0H^5-zP{o#@|TfL^~IUv9$n)AbvC&n5;m6 zt8R&`yv<3?<33UAxfNNwz|ZOL8oG6UdHR+hee9bCg<_mo(yORK&E0FbPv3|2+aj6% z41gpWmEt2*eZnieShTsMKu!9DEpapbxi9*q#fV=Xl=x!)CNP$QRLEsEv;$@d$S4ny zmK7LukDfVZb2-_w;2A#JV;{539bd-`Wib$<^dAu@igZSo{hKpGR%8$v+7C2gl9C|G?OB9SB zMp3>n%aDnOFCS=Qlbt4nHsgjBH~g7%p?1<|a&VA-t_07q(KF<9qAm3x|7KG8c!)P6 zuDc}yPM7mrj*jJksDOi`56%QwwggorvA{LYYMtbA>0VnE{O)%cHE6^hRYB0zeTNyc zrDHrux1IJTY^q7@t*zo}RXl)jZ~+0Hv5y5*63bqI8!bR;ab)e8N<~GRh>7BL3P%`x zabNX%lrQyFov^{Oz=6pCwoa+i`;4h?Rx}Ft@3qIjjKakHJrKaE8N0Ut$H!B_8BK_2 zap(sXArli*ehJ}uvGRJ9fP0K0@i%24kZ?D*)|!cI?=Q<;wh-391H?1xkiBO6sg~0} zlvvTmjdcqU*^*+M&&`Ez+McE=C~;^{ljKqzYb&rG>O%O{qx;su`#quJ#5B_O4qP(D zzT9EvT6)N2w4$=_qnQ1_Cv^)kAxSvG3Ci24tQG~I)SU?6s#DeEWPiYWQn-w7hkFYN zg*Qb~3Xei)bos+r0OW3Oz0ZB5Xr1iGYrC#M*iSXYwpp|!@rM5&9k-PT1tth;I)m4r zWf4_%V0_)36_WNF_9MXj=`j0Mlxc*`-tS;|P9%qk3_Ih~N-=mVNb-Xo%F*vJB|4+* zY_&z%>I7UBBRL@&XQHzn$4zWcOA83crI-ZGdhxtwmGbM!*jnWGUXH+oIm|j-2IOF4 zL5#eK$NR%kU!`e{O8{hJ^xSUlQIZ)<24%$$Ej<=lZuTt2lq6YsN?%PlR87%Ljqn?J z#QWAl<>e_sUgcxej`>H{58_H$c?80X;sC%%EGvfW*Z{bU7UQ)3R^d$4pqChns$paJ zpN)uBAPsW#NnQ@qpf@s^7nng%M%u#eG&>onTYb_M2o@sVETPD>ZT@Rme_;Bfbx4?F zY_)E{I=1*@JUXfLY&98}iynVc_$cNxY4<}_)iZ`7v?z> zNY&UT8U1Lfy-#vG#B;hCrv|5gGYE+q$VB0P(Ql0Y#r0u=GD~C2hO^B^kPOTp9>J2r z-r01%HurNuOe8ZZdf~$>BwY$_h?}132M>~`=4`1s8-8TCMyc^~Ik_Jd>xp*%O<*{b~n~a7^aI#b9NBJ+w)|rAJ$Z!~0_Pe63b$t2aSlCI(`GSp9+D9tr zcB0~NdH(Y!I(s%gcQ!|$8k|wr+>tSFCp-N=9AyunT3STL_XnLs562JdpJc)d*jw>D2TrIJH>A2Q3IHoQ_`AQrRo6R{O|es7L4~tO8Q>nG z=-Qn1My(k#H4Q^xVzaGJC8TvG#%owXQ@X~vSv$o91#7bbfs zb0H3^mZNURPy*5k0CL}BrD8rw-=6jB7vJ$3?doQq%qXdb1(gR4NI;`^lHttqZ(VqK zguEo~vfCKMq?R7pC?{|N9jRl@f&HxLTA1$m>!#GBueP#6q6SOc#cTMiR+3cZhZoU6 zgv)ER6Y%yih6g!?kIOERXjj;3OQ<6@06b#w?Z|}`AxK7KgDQXTX*2akEDonAr3vF9 zAHV8SrhT3KaVn;XLWbtTxR6Sgvw@r6lY}C|N5myUJyh$a{r7i2;#%6Xp&+^W|H*wc zNT{sn(e8xjXF7=#b{L!{Eood^q5YSidyj)DMvtt0QxkF!pGCW_v{=+d!lkcUDkk<_ zmX{bliw@j3B&*F`SB|^R8q54~N3Ip1Ld&Gvh+q9oP@JZigkyl^NqzUscE`R2j=qBD zhVwy-L=%ThZS}kxQHn0FZQ}CFDYW04<$HAE2M}B zxejnpuec5ReEL5F?Ic`VE3uO)2K+1S^sg@yO`5TRXAN{J`eq}xr9Z4tAEKaUtS0qZ zRYwX^cv+XUKJ}FZecC`a)n0xCc~5fpG$tYIUt5gbD&`Y;mwM zpNCR)0X|sixwxr2vdUoh;7aA%$jzi$C|dj%QKs}SpVY}Zafdk!`+gjII*Ly&WXL35 zjCl~O%br)vC!$(()K9T%wkD<5Q(H{XJd$b{Vh4NdC@5O*?94Lx9)?fMqA)zv|7yC$ z!~o-@<%#1kX6ACm%OZWo53<`8a`gFIB2o}bH_UCtu_J3oUO4_o6hjkAnWWpk>M}8B zSZ4DdIC~%s$qID@Vo-iq2X8m@bYY>I7sW26gD@|ma?|B5?AA8fv0PoX>=BCb$+PRK zPb$Ra7;-orhfE<@;I{J%j(Hmrr7zl^r~ll92{OJe&}hDFaQ1x69zN|=4P&n^{q&%= z09pbB*q(VSnoUA~CjaQ~U3Y)^3|Fc(tUH;J_&En1Vx44rW|<35jAC$oJZ{oW!2H#( zk@n|-rw0AQKmqn*Saj?onb7{U!^0D`#VJ`jiGmh-;WRijq6b(8F~UeQoV}HF*A*Go z_3DE{!dgVBJY6MY_ z2BHC|M%={Ic4{9cW5L%s2}0gn$FIhoXEv$wUvOyXLyMm$Y3F@&xA-abs#3(IVex}8 z*W|U7T zchzV)mT{=Z9D(!{k|QxJ5(iiOu&_6mYOf!-`p_+vuaOvTsJO^?yl7hb_P3 zj4k}Ni1Spg7j7Z74%aPu`y@oZmRpi$PtEHMZnh`oQ`)bE@KKU@R3yWk)H8qnGNn1v zFFX|BbG2W?)?SBSV5VgXdasA_Th^iEMRug)pH>D9DP;FriQ6P*3`$J%3`z8}OAx>D z!l!~tr6;i1heZ;~LBw6yW%vWy3J%>4Q*pAxU=K$EA3z#L$_A)DgZ)qPU@pl}58XV$ zpQQ|4ubk^;vC;?3{WmCf2luuQz@Gg%+e|)d3O;)JfDOyPNVLWfIlZ?p*|SDWK~FLD zkq&%dd8h1}4bJK(qQh+x%$6s`$B#yLY3G#}N~T*LX*)?jmgvQ?;D+u(B*A?Y!?uP5 z(VL$UlyjPTLz@!>V)+ML@L!?XK|xvnw>A7o(Bew~4>}AI4#mF(1Uo zv!ryAGV-o>ejCaP6RG$pw(1ntqLya|$Qr2dKgjwOsMlR+F7%z+e{RrSE8M2HVM|+( z7_D8N;f;L!Ge!;1pgSBUKRYhhWT*stg)pA?5S%LT^KEEmSX8adhiqHA5U3PTtZ7CG zb$3J89)_SXk-J6{+i!vB&j()QU@BKw2u)J2g) z>BxKvcO#UN9sNcRh!Ny!6p!Xqx+rF5hzZ?4AF#YUmORC9|H4=C9Ikt1>Zw`19t zQKi$mJ_eysuZYO8Ku$IDpDr?~P_Y<|22%0==64>73&0}f1DYvbY9}`j2H)Xgv3&&} ztauwJHo!cuU}!a*1w&{Oih1G-J2zL+>R8mqT;jA?(}L^OWGU(gD#$iMM_97BAHNzy zKPJ&%TFQQ>{r1iv(>&KOipBbcT%TiG z2Z0~{VyL~vuEmk`bW;0bx83CYibGC|5#P|>L&?M+sa#UQ9aj#WDpya|@Ple-PS>_7 z?V#CS^u>m62?|hYc=_&JwV7 zpKh^cvusqxT^$<52PIr)S6OxXUvDYU;&Y8b?SRY|kZZT=a5v$TS?8NpxRr6O~~ zT>mI8NibiQFB&n%o~AxM-MG6be%0K{l1rK{@wMLz$LP+@vdb*n2Fp4X&}UW+mVb!t zeF`7)R}axLpL^^lh7_K>KJaP24>K>z7Kx5VO@AE?Z#2FU}ZuXh4 z{xVB;?nwN6{-I=xUqt-FB~nss=~g-QsJ3#Y?}^w-U|ttO4cI@vpO~ebKcK458)7)B15t zTgsT`5teOM|6NNcWt_^9iNf7~KLAwc9H~amliM4PI~PydDf;&%oS?kWQn!x45m{{G zE-p)0_`KQk0NvU#j`kk+*m8fwIRVo0&?m!D%vGj>|Camy{8y6B$Nr=*-!yfLaqMcK z5zHCS8q2Kqft;CfKg`p32+O(($VceNpY~!WK!b0`vX(-^aJLiPJ}3kiKBWi752!FB z`Lj_0n}jo85z#-b)djnR&40*ha^yZCYZWEJ!c&qR??R=y;)O)G)$8^>#r=$}rSm#8 zW-MxctsEiKcNP86=V)KDWVT#}Y}Jrt5JNm+#9D~x$zuBMkTZt#5rnht!CsrqhV{Jh zZcmi|Z1ULzj(FeqQ)Kg`b$R}qUuSNC<}i;IBYtYi`J_QdWtfjBX1<^RlZcCfBPSWt zc3}n7f-E7!as7bunXUh$359SlyA_q$SyS-tu-PV*}vU@2#=sOq1XN^8h$G__pv^k}^T2^+D{_s<&(I2Or0#6r&+ic_{ z*u;8`sS#z-=6X|tzx%PfQGds~ET0*Nmmwv09KNnXxi*P*?XgKRljq+`Bu(Fc4 z@wq>`WmZbArq7e%8~UDo4aLIHYjMz=3|XklX!u+r%u?h_!>IT;Yk6^BpNtqoAqT@8 z8#p*b{2=!l(~$NL_lDS|(F3r^y{G-XYjdJeZ&{wo0bVwAP-QNl>x|Y0o^yUMZO95B zv=5{{44NFv{pZuei6{qVS+!k+9G%G*m4Zff!Sk#wf_e3MhWccvJk^imuvNuwkIcF} z-Sb}&EvIb-TLN|!Va?w@Y4tW}IOWPpff%3)#V)5j`fBpIrD2QyS%9n+p;;l9(MpQK zVo`6akqUrCD)Or+scnLp|9R~mO`+4g&^Hd>bMYq@7-g0lc)tXkm-Wr^-eV4JvXwk0 zDD5(_Z{M!i-T=^HZf#d>tPMMy`-ZrYVcN~*&uJI2s}oKZe9IA+c4+{XgahXI>Wl-3 z@EGE0XCM$+zZ_P)sNC1Y^{e$%YHd<&h#-Jl+wDrw`-l44sVp;8dBvgQQMTTK3h?1I zL&EN|DpminopZN9V)ItU3tch8tm}TOW3*7Zles1OQzk8G?zYD_*g_g|eDqoC91DF{ z{Z6+cGc+OUH{p1kR(61*$hrd+-Us|JFx!$X3eT38F9+7J^F{$!JW<#&|5B!{w8O-Z z|G=vN8~=}@@Y-U+;&tyl>li-f_wc8AEOMXN`2kLA&E&)nAs1_agmvL-@Zr_ONCKMB z?H{oOI9FG(aC|G@(lW8tNk!mp_CVI52+lzc#IjXyQP}BXFkugW7zqoFghoit*ziA{ z)4`E8XAFBY(7x8K=bUiv0X@$9Dd!!fE#0k`UOY4H9tl7v3T7?U^3Mi)o}mL~Tn+-q zMipoU>46y-Yg(uIiyfaXn^8#;-7vdgXJ!rVE6nwZ-)4`I2Jw_TzHU$zeg8Vmn z!o0xMwf$o-0Aw6yE*pi76&V>WwwW;Yt%YMPi2yUD)=8+VR(DvDWjWC>3Oezea{YQk zphqx#CbO%JCKBs2;_IIw2>jgdyO=%+OiE%7Y8#nZ+$3DZU4ai!=&2B&W+5XB(M_}W z*-eGM;=%iqJS~z=x@&{`$L4-c>6T$`{yOVinc!96^JzEw?EdpT)h2_;T(cb=<5V0k zn@OK!v*5Fp&fA0Vze)RBmG^m91xn{DOYdB1U%X6aJ=hu=)A@BpD+=4&x3;%I@Rw~^ z_#1Z_lQJSOLuBjD;$mZozg4)w-4Cjt^i9?yskq5N&}-kOcb7HG2-YvQ5Qy_Jy|^O4$y)rw@k1}gxc^l*Po*@R z?)AZ>viO#DD0urBK)ffsmGus*le4z}RcY<=(|dP%M>FIR6hXPzWMgwOa#mZ=C6wUy z$n7X7%FsCAH1yBrP?bN?+!y}!{_vE zW>|#JmY@D=<5&iS&9gx#sj4J8&ME3Mh?9R94fyY!-IMh<8?1;0D4L5|{TU=DyVe2^P;t=V=;9mHsx9+oo-CW;< zJpXngSaCtckY(C3olRnPc=#6{1vmF7KWuyK@3u8p*)%$QJg`%m@ZxNAq|xjSIedQq zXQ#J+`sdQO;Huk`g6m^x_fhndnv8@;d3j;F$Sr9Xr^t|`a6|S@4t@qWV5?|{D zrKSee_f}+2I7*W3aN3tW;O=Fu?#n+cLdHBDc1}GHxmU+@)9H?!)#`Er*7iYf9pPKu z%BNK7fj@R+-;#gZyJFoW8St(tPi8?3gsIGQo`jzyA;=yb z2ya|6Xuq^ty85IP**LSbUr{cu z<@rz=ffj1F;ZP}UqnQC}yyN-%5gBnE(H^_p@P=1AZYEdnzx;S`x^$&XM2aSj8gOliyb$r;uQI5g?FFc&9&fm z+`!kO+<$`-mwgYtiZI-;yw1-Wm(GJbZpz0C_cb#%i@2BnoO}!RzUmmDW#PDF>1_E| zu)~(MoKT|elDa^zQVREK)$jsB#ZUiz2)gXP0+QVUHc z-bxH<@{&*L%KB8(7#T>DQ#>FVJbY;DLP5fglK4uhukg z;zoian5L};jR#hj-KH%Uo4IZaO>8>Cw*{`}%O|%)&xZRyKD{xorenWm8F_1`FN-d} zk;YV=T3xrxXY{JyrQ)N ztHVs>d_r@D!r`uhAno8`d3fztET7$Y^6KO7+uV3?boX=L{_NeqjJx&A`InBr*uBQn zd%we43_i?^HN-|NbnbN$i=k9(4((JE)#hGYCgsdwI_JT7rgJHjdT`o`lQ!o$2hwOm z9^Hx?bDljYE-rp~y{Sho5J;sXg-CacJa&D z-S^o&x&RLZ;;!_j@KE@i^9Wpd{hm#?Y(bda;M>2m^YFdB-x4pXD2{MlUc$@q8Qj8+ z!=nRzh69f3lEY^CM&4Zd^@G#p9rd!N3k7Lv#gWL3XIH3L2 z&v5ZZ8Yf{8@GJn5UwQrV8z0N(*Pp-j%8TnyoF3hK>02+o`Lhq#xO4t1&;Go9F+aSw z`8ePF9r1tqhq^~dg9)laEiWcVw>uxHV#!0j1e4FIW1uOV78(fcM$3X=szT^I@FB6N zZB?r4?)oNe96-mNpZ!)IZ@Us19Ry3gbkWacwaW=Y@1MMM_F{SC`WIRb5UD`@lhi(K|U2P$AGV24+e*5dMPoJm=B;51;RnWb?59*~HJ(h9{FW@ur zlDxDy%Keq$60Z2w>CpQ1aPRP&{e$J*#aPyP^qe=yaJcv3VnG^hH*%Mb$@)}V2E@ZX z@21q#XUZgG)w6aGAb`m5ASfmPoY4ys4)65$`T3U5kI!Cu^qI%E9<5J-Xb*J*@e7a*y&J#_X}BaQQ+E@v&!RV|8I*8-@%z7 zO+cEz^6$pS4!(WxNY_?$41I4l!0z^pU*tz|5qtmv+!kKXiz8}tKh$kFyxtE`e*4u5!0UG|q3-SN{r~n7 z1&vbV8eYUJ@fp4tHxG_kuI3|L^~=+8)89QFGV^`4DfB1y)lH%;vc%%rtGf zC%D>5P$1?S9u)6R$`~u1;B}BX7j-(_bvrC3N6q1^4UuJ}&qW~AF;q6-do?CE^>?S zG!e+=_{#^6n$3saYVtW;YXej~`sAU6zh4TAi%v9Y+M;1V!s6nrY3{}K3D1L0L9)<*Zj{gdi?`0&B{#94{EkSs_x65s zeUegqkQ;a*KFiOf+q|Ynhk3oxDC5; zSS^d~CZo{cpl5m@91aRv*_Q2UdvyBg?a_4od=(n`?qALKFa6_#JByRUdr`$`UUYJG zw&GNC-Mxc#O;!h5d3bRD%2(!oI)3uv;~zMA>D~U`XW#tnH~)NlIDJ|F@$uioYdC%Q z6mA9nP+5-Du)s95QXbacs9U_xK(`Gxip7)dB}Z)i(zb&2;%DoA!`D$b763958jNktcekZ;9AHj0;Pft- zrf1&n--=71O#2*XZ}0z;mk44hM{y%w#V6v`?nPM*%R{}4V_x#rx=h0x!?(+W;qIjq zwY(7~18MUR5cd)Y65_O$;jM_Vw$iO_aLrRt3>pj-_Z(Gler#p^!jn&KuT96cbndbs z03agQTkqUr)sybQ@N1X8eDIJ}lqMMMG6Mc&EdoA2GLcnW-|EJsJL4d)p?_aHqMqRP#6x)W$Q zjq^aavT!fr@WnLixJ+EG0jXj-89d7*%F(lDx)@5g9!|s4Wcbd_e22hLb>e$>YZUdO zq(!&V6mGqhIiKGA=1+|`#~aqyYf%J*_vzim9nag_;Cnq~-)S58&awa^kPw)CS3E-s z<6!?CNcI-Sgr*Yj7CeYfKOjL^qG6{NdRXhBFhFdM*(b?bk1dlxPvf* za}oqlW7TbHFF?uT;ls@}nmdfDH310HwnM68;bvEH`p&pZfu1d%OxJfW%=(?fdTwvN z{o~X1dh7g};Pl3uf6h&2se0DE?tQ#;{I_5Fh3?VYzwfQTuq)KP7b@OsmHy6{ngGzD z>ZTk#PV7dYWmoa?*kM=IJBMC9KZC(h(clOa>{j>~h=L5FLxS?sNDjz2U)XugG(D%c z3{21HxgYjpML|ZOqF!WLyUsPo8Gr}q(ZIupe^wv013}GV?ya34P*WDB`siwAwr$m? z=k3kj-fx;0DVpdj+=>_5_sgre#T$Aw@G6hEvZGCZcVYd#;hV#~{v>buQ=wKHk_n_X z<`Wx&f>2J@Cj(e_nN2V#v?a{}curHxR%p{I_~iC@U4Q!9S4kY(4gD&C5Y zwiF1KuU~%s+OJqyzcAi9`CXgg{7bQ9~8G-Hdg0l8mak-bGm%Ke0=lm>(k}8+2P>P`LomVt=q;g{5e^3 zy88OfH!htD=z-m7kCDC$Dsu6S65NLFf<{8Zt|%rDJbCr}bKx+~Ne>_0_?3KzZ>L9j zL*DyD`fINFF+hWVXHh_cUHlaO{!mUJVK-hgGoxWT9xom2wT)d;B^+7+Nb`UHe z2yCG^#3d{+15l**CPBNnA8z{z+tt}CE!)AC+pBFzUAsCzc}&e7e1i+uc#=5A!p; zg3I;Lm-qT{`D@*JxZj^1oGwPFRwun>vDWLU{@YCQTP_dYA9^ zf6wgk%TI2NFOHvmfc(bd+sj{FevOb_r(4!B7}|20Jf~`fyK@_cc56=8zKAb=?C0w0 z?8XoL@X3phhPPk(+DniA%)=A=M*T(n!qHdGA57zK&z$E2ha3S=T&BSJGTlhCop;uZ~{PieDsxrZ{lBm9Y2;lP@$>+bn^aUd#*2^E zMyVJ%-5k@e{v5mC#_wqM_Wo7-BmpTh#8JE?FU9xE%X%YS>+>bOf+Jj>E=`Ab`;-1# z<@Cze%IRWMq#7#lEFR9OEgRsWY4R*nD693Ls}DhX8sSmIb%LjAy)DD7oL?WWpI<+J zX1qNwTNdnYChQ972?-fQvTl+ooi_5M4!AAo&@o+W*M^BLJ&DWRo$&>IqG#Ld$Y+0e z^9Q@PhA&_FW%=9VmB*hwdujaLo8NPPlkW^)A6^^o(fwliycZp<0ABLx+`H1DDA+{S zn(tn^`|KCbkEa`tU-_X=KDzec_|0qI_>s5&$MxRuPlvx7|5U%h)8B68whuM%CR-hW ztpcpIxV!3E0wAUnFc-1Vrr-SBTeqQ`YYB=KG7@GDJEtOH0rf4{46Ltz`A?r+|B?Sh zreLMBE*BR0yX7cOn0Bh#pr+_Uu;gB(P4T&e5Lo= z612W5e#9Tb)$CbtQN`PZjtQHC^$$*)7atwlMbDeTU}%_N2t2{r?q|F6{D1G+I{`o@ zad&m|&V%AxR|FD%&OXL_AN6x+Z|}FjOX?~sxfQqM)%XFtq}R0^mLp!qu`TPR`v>d8 zdk1e0_YO`Mo3e>Muf6Cf-byRU#E?n%R^BhxGu2?gdNF|2vzU0xtod}h*0Ss4YfoO- zd}1E9$J^_+yNk#7#`tz1)Dx5Ilr}P99kniNsW%0@t-fG!t$CZ@UA$f1=^mZk-u!ME z1yG&?X}$cp`9{6A{zLII-M##+>#zBjqOPBR{A&H=gWvt`*xfn&mxp&Ry#`}##p#(< zsxxwU0F+T2&gu&2G~7A7w|p&4>ldfv(@(Eoc`&^F!kri1{*&)MoWCKTf999{R~L8h z)!#1Te?L@VZSph%TeZ>*kQzBzLpx**rkd;HBaStH=}(;v#34QoLJ<%w-p!BReKBD0 zdichJmwKE5tepJYr61qnulsB=y?3Dg-a);hQVw=4&O~~@5y0t`bHFuiyYc)WaZ#-Y zl8Y5fUWbG{O$l*v(tg)rKj8H#pou1djZfbmT`|516rp1TRx(;uC>6FI?%dw3TQ@lZxQz#6B`Pw}_@s;v)`xc=->?5)Z{GZNuG;SHeHbs22udHJpcE zTrbuBq`!N3_u!qw`~6ATUx9kKed)V zet-VbGk-U}WUt4%_mBD&<3qI%ocplZU4aa`3$(grG>Ur$WXj|0=SNfD0Q46Htlfpi zeAc3RAp1{!HcyRsl^dP^x`L$`{dFkFyUf;jKS<73S=ie)8#l;L~!FHGr%e$?J zQ%Q%HNQ<)oFuYT&Tcm?-KBygL>~?W3a0ucmE?+D}OBXpx08lKd9ZpZ6^P#I<**;q@ zpFSV{&X0ZlN9>X-C>MpkT_AV~CkSjWa+MidOxWUl^ZZ{q{xTmNR5Ol-&i}Fj|9k!w z$Hh;h1$I#uL`4S$(c{rYu(^1WyFaxTzV`M$m`~9Gm6crc7x6jyzIX{Y@=>3ce1?~8 z<%d4pSvip*VliO82o(Jge(l~&Nib#hJG=)yGNe>&NZu_aX8=jMPNH_#7Ki0GUn~Nv$ zq}y~`B+l^2b|72X+Ct#oj)dvV`v4~~FWo7$JH7k`TWzn6uh!?c-!G2os3mv<8l@J44NfUSHPhe%W{_2;Gzu3z8^~W#2 z`sv5FPF8Qe@YV}=e)jR$z1}`Q|I*bjrTbm|=%yHasKVMM^HH$v=7YsZy3VSTc+=Xe zSrLdkF%pi3H}UR8W}=WQ2g8;PBcSa{T%4@{m>L6*UYw6Ref;X7zPD#HUG#KSOI1Ah z-ieG{{C&F8Y&-AaQBTdxk!$lhJdFmntroFQYEBDagP9f4qhX<0uu ze*E;M$Im^!^8aS<--0Deuk%3cTkBu@-#d5i%sl7RsngZfg<_#lU1&5KAV82JDT*Sk zo28ktY%640;g|_~9&As9JzOgl%a;qZwJ`3~5Td2qGzn z0)a-O(Oq3#U3Kczx#VT%&VR3eEkEpiPBmxH-832mFH;NA(H*GDJem7s{%fyqeV4SC zCdxbh9KwD-ylu0q_L8u{8BXyQIy}P`8+6zq!=c^HZ~Xo@!hdP8|L@uJYu6(PMs?5d zni7`SVu-Wz(S42ZCkuytQ7`I`s_sXR)ZnhaMql*%e3uWWO;yiuX#2d^HRqF)$?5bv z)8leIdl)1nQR%FrWYy(PHw%PJTCIxK>VX76>H?^QR_nOj?XiZ$$(VJwmzwR3_Qv|N z?ag#(l4}50067gI^$-n^b4ply%INAm*PD4>uyA3eg%r<Gs*{XMdx7C%(7%#^OyfX-znh=GvGIR;>q9JKF+__|I*Q~(%ZZ9i$8`S`%g9H5Mv3;IRonK9F!BWR$%AY=AmDR zngh^r;{h-%BGRRpl4+b*9R2Ng{#JMQ=}~{s^UjM8`d2O&{0tz#%_?UeHzycr&4g+> z*?7S_648^oQ!2zn4K|Tf04Z~!ZcvKD^9(D$DI$P`?MRpwI971HH~Y2!8PHdk{%5d4 zUu(;ypVDJ`u;g$3+ZXW}HaJBON5T>_lz4(>1o{F1@Ck>HX%_?su_KJ}35Ey;4|zSK z!!*P71q1p;{aLP8hvEJZx9BVQ67Kq~cvQw&obw)zQlr!3$?5cA^?vi9URUR$y$$jv7O9kOB~bMdi>MyOid^;LeZHzVgjiw3EUwL^nfg^-d5|$Ba7SHI`8gwUr3){{f+pY$vgYMLKmBt z+Wpg?U;l;WUw(92z1{rl`J3f=u_h%LljRr^G*^UNh0erc=wMz^DqBj$dht!;-9dNj z?59?@o*h2A_1?{gf9-gQ2k|%deuchXJ)|G$%=4+HocHy{%8`mxGZ(36f?N>#x?Eai z2wmC>>vApK0E01rewa+m_|jG2ISrbS57+-j@k}~Ht0)~<0NCpmFj-eyuNCw2E)?_BTy|lMIT7GVOGwr1V zi$eqnFwl}10fNE;xMhS>Ueful>GpEf-{C0C94#Ph<9XZ^7u9>kR#pJ1m6SuW2#2Mq z3ujE+ybKpQvAKh{F0in*sTTmYWCRz$LCj|C;tW8Ii`ImVlXK9?gOKPqx}$V+cWZZd zd4KiS!dZN<_l=|f%X)u(yS?9je)AJg+v0fgoyG4q52XW}43P;QO|E_hOY7`x5zJb4 z)pGXe`fsJCyRo`|`r{Y3j_2Qd;IU(HCul7N78scos%?ZNwBzU zfXq4e%B`p&HAp)VmUdg0=`vepxN{#FXgUa|3?GgT2v2YPqy2B?Ef&W=723EZv&)oC z02MOR+FrV(I`^ZkCXg# z|J=ZZ+S~lw_HBMMe=|I$bJqW@K4-O+){ijUP$kYW0j@mPE{hBw1B*E-XdHOc1Brpg z*TLhJ9i0e1xpBRy7xky2?njH%;6Co)3;0U7#kZ?i$Xs5+LT8wt*N?09?Dy;A*exEE zYg7bCNDeYUI;{X!AkA3`q!y)x!B|Nx8e1f=xoIV>MOdz2yZLUfJ39aT_EtJ@?&mJJ z`W^=aFd`UY(oxGxDB2! zLOb*poC#qIVFa@Y@7x@@4jDZRstbYxQvj+>=m3C}*dkg=ERccS$|+aHy81?b%YSuu z)ZN+M-+rn68gI)tul@E*|1V0*>*rr>?=Ao8>KDRk^}YJ-`8SJYP>&`>s}-xPU5p3( zh?5(Tc}P^QPKtK+_R)W#_3G}IetdQJ>CyYQAKZTMi|hYo|6uj?!(ZaBw+}b%A1$}- z(>mX`ZaqRv$`-o-u%P43eEsN2Gi^%_7GlxTmEdx0Iy}6m4~Lo&0Hniz5l=V#Y}!fI zJh_CGe3V#b@d+7t0HOpset^)Sb4!a{k@V)$&sbRjFN2DSNu+6$gcFunqr(c15OI!6 zOP#?gG@-=>Rybe2^6!4}>#G0z4_)}@rk~lKw;Q{l}j(s{QrN?r42$`_lGy zn(qz?S)S|r2r>vZEm%mD+SW`S2tf-{rvH|d^r96 z#W$)`fReLS+_4Zyy*8G%pPNW$9FkVjY8_HsHxG_}BQ@>K^DnPoUEO##f9H+2-Z=R? zZ9Dzl=|8hy(ccT_rT)?6^L#2`jX-O+E$^yowO&w{W3f)Woj=rVgl(kNvMaefw-4R# zD+)M_* zP&o1!BYk;Y0unwkRDhj{2f5DRSWt}IxuFJO>GKBkqF&UWj=Ik-5Y%+r@8HY$BJR^s z(G=CbT*tmOI$zf7$!Yyg^M3QFNYi5h2`4a_b4a-|3$05?+ITm(H?zVlLV=(T7gl4d zECSpCU|3&w2iwEdy|h^0?dQ4DIm~$g;dyj2EFj7zEqBzR&6cIFw6WU^mVikjE;ga7 zo)s76Gfw3hb`URIpUkoBN{k?i_=^?+^n)Hbe?j>iOl1;ld1{DxyN{3oHlRfI^AsV^tald z-u!$xD;~_gb?qO7r^i3ByR&@b?6qhAt>SU@oxN{Vk0-|#jiu|GVr@}t(xM|Hc7|xp z$twe*#kels-g`^q_Qv}D{V)F9jq{_2^`pP?;4eM>U+|;+_1*vH=y&;@C(9o;&hqK# z1Mn6GvB`R0Y+Hj(CVGaGc(`sGF!5H_an}%RRIWGzh84SAk%2GEQO3_{3>Wej_#{{-P+f!j2d3*ijbuEAYp8juI>*Ugt z&7jy}gWrK+gNGpWU}WsZXBB{#AJN~PgAKsmr5R|A%@whEc=m`4x95QfA5{!9;xYdd z1qg)Q*kXoO>N>Udhx+S&Q7`I`re0+Tgl_mPzmG5A4czjh`e2F~_W7F4ZQ3>u%69r- z`hI;rIjPpMlcY79!`TgB?VDn4B5mJLbhaolX#{LSuUt_lu!GYc~hSC*W#JS(B_JmjFZmXy@OdPtG=WzPs$I{ zB2OGXAy^4GigSyAMou}hx-rOLCeEx7PJ=+zMLH9!07o!Sp_6s>j*HIIQTuxOvE7%j zD?X^-Jox9Y{3qSw^o{Lno1fYIEOqhG?02Sbm#5XKRmLF^TnwQjCewyHSFNC-C5FOS z7H`cT*e|Ch?Y;W?*-x(yPpXIazkC1q?`}@>H;;ace`WWL$>T>qG;Z6cnsNeYNt)yG zkbvZ|T5m64Du`_@mMt^5TeorAP{r`h~{a52(y_M)8$Ji_uu)+4_&)59AJSxEZVB8kEicU-MUC1M939)tYpyLoYlCWw^es=_Qmb3H1GGcxzy13 z$ZM6+oxSMT!U+=A&|RfXI?VTk1B6QpDeUC9dRClI9!on=mw87Pk_iAq*H1OTxh2aD zC74A{-1pbz!Y1X)Y7hCPVnYcrp1F`Y+eB7*YQnv2 zIKlckCub99PPyU^2+1pF6Bs8>4n%1IHxsDUApvCEmM7K2#cy{vyPN6O?(X`|=C5Hh z{q5`T$nUDIUpf2P?&YWVPEv6^`R?rZCMWTvXaP1KB4au-mC%uTbdxsMWX{}q-8@d~ z>7$qbNt!QTd*h4ecQ5AeA3Zqw-d|k)z2ag2TZg|wUoYN9`@Rx?x?Rtw+~s(3u&u6H zbR*4Gxn}bSRH>JecQ89W^7K3;z(9k_hUtn7{CuBdY;kuj8zxOh^GRxK0*69i*rG%& zduhuChoOg~AK^6vsWGFt*gM-@fA<%@^YYt2_Gt1b?f^s!OFW{twhzDaZ(qz;NO0`K zA=rV($72M>F3Ae{;|_WTf7os`fq_wtV^)Z_Cs?CEIZjUm$ABe( z`2}n3Mg0jY!mH5_a0B=8x_=e7{AStI^$Z8R(0!eD(`9+yyfb}&_OM(|mH|b_Fn}2* z9xaje^N@^TWZYS_%DFr@aT&syA%lr!b>9_C`O~MjL16%kLnM z30Q>%3msWFC!^EM-Cl<6v@4FLLdG^nwI9BM;gM z6Pr>G$WCXZfn5V+W3`oR4l!OlA?ynwMO6Pz7j zS$iZ6$rwz=$%NH9L@>Y!<`n^K0%pxMS&kMtx#VaSr}A<67{A*${b74=cenj%|9SM~ z_v(Lj?f=oot~viw_nFmCE`NbfCvQ)`T|byU0zxuI>T6kB^yrYzA`C{FYgzX-8`OCE zc>36W&Eopj{Wq3hIKOiu@8AFK{dfNdbl$&7|Lo|W(yw7H-4DL!`BYO5;4P)TDKFw$ zD@nwx%4`}-$+DH@t@RtrpVpf`N*iT7(_EGB4Q$U$G!pMZLmU8teC-^N{h&F|taAIAAi8oq{WwrHov({*_|`}Xuvb1Z3k z0tw~}Ar0Es)DeTxQ5D);!9u5vtf5}z$mYyRD`%IGpa3VZ1JWI6)!w+cxBblaMn6w` zIX)-l(1>&tU_=E=8&1NhBUP#D=Q+|X5<%1e*dW#{E~E{8`82fY8mF)_v4RXeZ*{^I zl9kvMZC^q1EL@P0f=6c*Rh||XyX(aY+ApNbF`SV(d+evhnU#5N zm8`Vj4yI+;=7}-EYA{xGBQq%=tvgll%NL#1a)z46>9!`FL_O0my zNuhIgCL`pU%s8Z6lje#Nv2jTKTv`UV^S7suUjE13-sbl5tAFnG^Xh}Whd=YZpIQFB z?IZlQ{^!?zdG_YJKM>gVDR(*6vcb|slCwu;H%}JJF4(izpZ&!4Yqm!lzR1^}`xNo8 z`nLghz4R9t_4bU^o7xAu+FV@k*w((d3}_<&NvNYy8X6EV8KJ0L9Dn)Az4tzMJbNq! zP7uu#J-{#9Kjh!m z$@_B67CN`)WO6(?nSO8Yow%MXt2MDpkzgh;69%_htAu1i4D%Xh!U+a0&aJYlSZn3r z!H0}PM`p3F(q4OGdvx)t&eL9hV1i*P7#X3XSQCY@hV!tdE}QbMN^`3FLxFG!vSLSC zJ&I4uvv@|3O<3!Uc8D--WaY5R!DqQ9(=u$0$vhKl!^tIHP$DLC<|tjBAW-rcI;{b) zs|TO)&g$xeT!X`gQ$TJg`2>AvbtWrL)&Z;*onbCoTM1Z%*}_3qz5}s}I?TZa5>8rk z3Y|7&)PVzFVQm#m*0~C5kvcGUCakO$Lz`=>hM&MGM^2$DzdrwZZrc018|ha2)9at- zP5IX1dx!rd{D-G+tnPMq&;Q2R-;m?#!Tet?eh-k26>yg1;FKeQkt0+aPR=l^$T$U^ zttTgkzrEY*_SRoH`_jp+x8twgIlF_uS^wWw|I-rP5Ad1#lv9p$uF9LaN?6%~%#nL< zj(_okYwdln=-K}NbN}m4{~H&7)%ntnbM!@1kHBU8^X0_DyGd+n)6Y!i!Oz;gwjS7J z0RcAVfKu;5<2_CX!v;${sXqAI7t+B2J5W2uui@|0f5E4}o}RDpUEQ{rjyok_g>sxO zE+g9pLV$vEzK#-x-FQVZ3?(8+ z`xhPOMg55DK0CZYL$~NP|Gd49yT$EL)p5%Ewr~43P1AKeoxL@AGJjZ~#x9toA~}Nx zR{*WZU@n}1AvY67EK95Ux@a9k)8RyhN-G#(0`yfs?+(|uF21n6skPO{#LoeF9yc^% zqM_rKJ3iIQy6s+S{05j~;K~@YU2$Hl;z~A?_hn@z_uLVjEqdfFpar2g-_2#+FF2zD zlktuciAlNc7omqh**sd5H6^P^$z`pxu!ExF)&(3k7GY#M2UAC|NDd=}3!PgCTdQnB zJKe{Mj1osMuSmnnsv)Y9xIf}=!XVt4ka`6pvncA!n&)!voDOA82Dmue!03Zpu}lX@ z#;9NfQdX^DA-TE0fa0|IM)TVqcQ?CRyW8pW+piLecj|8({L}oOr?`53`C9v>&CfhJ zEgv=iqB?Hg9vW+CUC4|{rA3>o(De;?ARc6K^l?+4&)?T~^(}oTb~fiMp_^m#1AV?e z<&@Jy65yPpOWAdG*z|?->0gbj;?ebAnm?I;Tbom3zH}NGM3*Hx;X$hNq3{5Mm#hS_ z@?zG<$+VkwL)dgiLW1BFoq;ggg9dyXOB~}InVkW&{*ZsG{Ev6PEe|FAvi-qViWJPz zjg5h^j~0e%pdWys$OuRPBE0(O_bluda2cThtTDp|Gwcw-&~Ym?kO)3*>}-%m7X*hR zVTU;gHP++Y7ZJghU+8jP)Q_YH_r)7Oz#Y3wU!vFPt{if;kSPv%KQ(C1o0Do;Kd9ed zyi>M}Nh__#Vx21!7n5P_KR6m|C9N^RS(X-ywyyxI9nxtnEq5-gLyl&*r&W7n`_k%u zU-x_c+@taH-R?*O0Gk*m?zqDVcilY2)L@?XB8W?fg9+5&@bUK%%GasEEQx3A^-#lLkC zix1@C_1}2u>$W?4ZS`7r`}p4hPrg~c*SuLBPahdWSe>Uw-G$KUj4C{BQmy`w9JkIXs`L|E<-5Zn z4)Fv94CVO9jz4L;w&ntA%tI`LfY4)tV-O6A0ucmz;XUx8{z&UpMuj=u@H=?TzKGZS zNcM{AAWm_JJzd!JxLi*k)Q_g`SLf67LW_=!4dP7ZF|N~`lU1AutlR-6xf*OIeegl6 zfLyVfxaAraI^#U=>s+mGtv=h{YHw@fu=w2iDqN{(f(3*woO6d|w!ZH6ve-QqjsX>d zQYz1iRk3Q`mNsl4#>Fx>FfiC6w_2A^ch`dQ$|%=54O_Bsk*CE48G-v;iPFv{VWa!9 z$`kIvoFKU*b__+Pk~k+xxpObUz+8@?`pr#czdwuw9(}Z2Qvk7ni>P zjgR;Kzx9L3^qKpVjI~1h+pB!CwD|FaJ`vojhqvWtEUDUGlp=EC|IP0M!OK zs>Ipeltb!cm9|o>i+9tt%SSl~jJVBM<86EgXD|>l6g!+RtN-z}-}?2BcltM2hds2T zg!B}QgoFy)aibH)zqaFoKYF@g8@4tC!xW4JV2UXO4hF*@AndsN1p0s*KqG7xkVZ&t zaJn8+1_8QCL48p#>W5da3L^IWHtzWs>2V4s2@ER+-PHgwy zDKyu?tO7y{c5!3NBFQ<;vv3#MT#-4mgwE?+k-bt}9BFG6iB|;Paq>tTkHdz^3M-IZ zNOQ$Z<_H@X3k)PH5vfIOunAe%awgSD*tl>?3+!M7D?M8Q4qFI-5>95-;D$ztt*<$e zu^JP!wir4SGMC}IAC?{mdt|_Bx51#4)P&Z#j^`#J<<0#^d&l*uHo;t7iuL+V4*=&sDCYkuTTV7_19#I@cg?T=yC1v}Hedb^?tZ;6 zn9UqJ?L@n$DVp+gCp7>dxwMCI%;1=yLWv@wwDsBiM83O!OLf;XaB1sFh`7M-fBq4_ zh2^+;*!kFXo&V^+Tz9kt#o;TmHKLINima za9A`G-sgQ>)0xee)oFEHKde7!jtiYV4#o-zipX#d9Sw?QW;M<+s59UklGc()0gse) z&K=-v(L_3}ljNA<=4N}e`uz5W&ilCu_!2hr(Yd)m0WwKp&56(5ly}@WIp%vTfeWjR zjKLR^r;|sV;#pj|Nejz+4zNX-Hm(lh%+&QY)CJ5P#6wtGMI4M6k=5C=m!Y#7B5R$8 z*2Q92g8>&-7a&jMnTx|~7zq+-@eI&CGMj`QC9gQa9OSUPkd*G^JCC^nh>0oX+7S||OHdP5 zj~2;XLdvx>E2$$W1Zq)Q7fz(iWFGs9xH!)>r(Bnhic{mv+BWvERM*_3IB8kF=6?&|FFC*%i#HbCazgVflkHX+LGl zk>sso6W{;R@BO!*efIF1umAmnw|8a+kVT$hmb~ek1|3=`A{-qY0j^t_K~SN9Adb&Q zaep)C#k0x&SHAV=&n>UFO$&k`fU!fuWBjL_Fi0=ASdW^R02Ydc?LPjc8sJC>ppo3% zfpHEQEqDZB1j=?u@uMy$!E~?&wUNN>Bat9{$Tt8GF5&oCDJWQg0EMH6BO<}kf&s`l zFR=!^s2BBv)~oDH><4t{U#5Hb9A2ZFd>Cae2X=r37VY%BKCe!u59{~q^Xk0nf`WsZ zgrpUTi$OXQg4Uc^T?XwOD|cG6v1-jJM*z$z*HDvONvCmlpw-2ztNVS^A83=SK|^yH z5im|P#$YSfp~E>kZ@Z(u(wnF#1`dc|m94Cc?d&Z|vMVk^%bJ-Cuqsyob--@H8yHll zyiU*M;B6OX6{%V z7KfDPEYwBKsW_c|qi@b%JA3`){?niP?$5rbE8fT}cp0zr9@hwvx_B)eoPW!Hw>pKo z0h=2|>l`{`GDB}LU-J)`tnw)tYfGy-$CFq7`M=XGUj3EN|7S zN1M#Ld*;0<~eUkUfEDGnNGc!7l-TGP%>i*EX0 z`tJ16^mKAAhDz2D7bpR+7*Er@Sm(+HF$0s4ky%A*6?dUC$u%nggl;&}NOSDxX}&#N z|Je3udpqsr+Sxz!=?!BY6h@5bDL*? zM@~q2FC?%_SkepvH6il_K-%A!KIj{mBXoTe6y}gbsox9ZcEI5^b%fzn4xw^kP1ZL- zX`L&NK#nj7C#%p6^Z`!&9(OQE=yK(abd>tN&~X9?;LSlhUmiUHfoNw{x z<39EgA>$Se*dZVE2itq6e_c+hx0~N<-maEzK#mZVTqPjU=^xXSQ=2UbXVtsa!L#^e zd3`%AHf17ss5Y_P%z??tsxx%hjBhC-04U7(k|cfUpawYiGg4BGqCGGe(P4w{;9ubw z28N!ms%6y+w%zx=poXCN3V$Xz z1O+acc*C;`0Ondhp0geqav4C^BZ07kphQ4{s|}a^(b|Z=s6RXPIRSHpLw}9#`4{PR zzYz{6O(iqz;ZXOqI-jn~^VysAyOZVgJho*EVE`~mo&YyDk5EpCI%jC@ES*JT7$Zjp z%sI3cNvqSeXK~Pp^mVFNudP3`JLryf2UgqYEOM#A8#go-jEz(tQU}f0HS0ZXa3hFt ziMk_|P0;FbToq5_I-ckZ00V4Rh2+_y^Khh+X3JA3D>x))D?JwLT#HGU_d{!pNM?}$ z&VzwY3adQhtyh2xnO80lN-kv9a0{^*TCf|LvqefCp)SsxcGrsw?x0qaawpq74I7<> zor}(71%#bPGK(6WW!*P})+KDs3AvJsJavX?qx(+0WsuX#Z@}W?f%rVw6jNsvYpyA> z!aRn~B&ag8F+d5hC~dC5CIo}kL!Q^*MI8)nt^ra~lTi(17G-UbiR{q(@TKIBDH&@C(mGCX3cmJhf4felRlB~NujWZGxmc{Le(^!Rwd3L{i0pjWc!*fR zVT7hGbvedBwM)SvCT$Ec{mP2BZ2@I~AWH~etQl^pN^_S017=kdILSe;z^m$9psF$J&^ zb0RY#wMgo0lB2X10Zs(Atj4SqVE`+P;E-0U!I%YbZjZJ{j^*987toLWz4RZ_jF^|njN#1Xa14t@DFUX;&5s-75!ovck*b-^uZuE`8KF=JH; zZGSDEW#P^vgq3zEz$9dDB$A9x2+mfAH5zFtnLwbj1aieYGA+Xe8G&}BVBR9Q(1n#S zuT1lVdoveOiy@i7SY2d8mYdLWBD1KR>+%^`r<`4&L$i?9D@qo zk}l+eA{oixX~IfO@MslT7Vxm-cV=iTl11)v9a=W6fE>AVa{)p!kydMG?nu3sbC1+n z!!3!!=Gg0U!yKuRr}e&;C2%q1S^zy8Q&h8*U(Ps#gy}+zE8a> zRM{bJ(QEj;{{(JhUhOd-4iimk){|~>GJSjYZqYW!(-UTrplr^h7A5r!t8uQ$Lg!2d zuvr~Cz{H_d=qy4)r`2#o=1A5z-1T*8miM$?e|B@LJ95eO5F`Rz!sUWs!i*xZau-f% znUT4Z?M-c%3uca(7_02!vtnJI$gWf z>kqR!4p!~kn9or?<-7lsQZPB7}M0=wl2XKRoUNx{^C5yK|eW?)h) z2u>udX55m=nqscl0GU8$zjDPXB&c)_)?85no3NU2vRJIGqU4cP8&a4>5?Nd29K_AV zB5PP<@QXH&eVyy={QU6Q-hv``r1LPyWgWzj%%eB=7!MfVCcv?BL%I|5uMR zujEg% zKl)oAR2KjYJ7jFo1Axgo9R(O{H1%{4L@a)ufB)l;XQPxc%t8~C*Z`yBn~gEqmvd7X zC$Eos9$ck@5(o{J01Q2ft4$6t?2bPE^$gVSA(@atSRh^jbO3=2KcLv^Mg7^Ud+fpu zZu(8SkFWVX+$@e*nreo9T+@Y3yXkSUp1;+6H?HetwGyhyBtH8BZ0JN zvj8Ebd1wi_;xxce5Kes~#_D3CRX^X{+`Qc0Y;UJM6RT}JGlos<;ByurCdO-Ca)&O9 zb?sp~z#*C-0TZx=9b5IJ*p^R<3qpKGO2&P^Kjhi~&@3isQ>50J465_cQnCgWTUbM4 zA~yC&=EBPANH=)L>(IFXUYSZVwOW=WG^FK-Y;-28JjwgK%{7?UIwPSD4Bj0U7clOu zg190vxYsFn!}P~#n0UOR&SikU$c!P5TysaAF|k#$(HVCxVXd*;-F;tzf?N0ai6 z@?!pY_Ks|9aq)|8((SG-UwXFq-sBV;$vDE}^|t##sZF06xjAjo0(d-%=J5(UZ;@mV zyQ-@uHOKCa-T#RX2muuc35)>3Zq()U=*C$AD4;LnWq@qWJ^p1?A*00_zyyQ}K%Upu zk1Q`9KllNeqx`;oV%JTV`ko3E6k9|vCcu^94MvbFRQ3_kXoPG7O`1Oht}y~4E(zU3 zvl9N8wgtkB`!Us&QID?H6(+c}({T`+{eYy97xibN2#$MmZv3X-qkHrvzk{2_fy7#_ zV-Nefm#UNLK9g;QNxxiewLxAW4T%78Z4auVmC!KK*gdG@S6?fdZXcIaRCyQVg z?o0q;0=IyxM`?{oIaw9XU7SfMnZWwRX#US(M+PHgA(G)}J;+hD+8vzUeRSjf8{ge~ zSU;)ua1+<@`Kvw6bB166Hr5PpReC_!B$ifR$jNGdJB`maH`$skaoipJlk$m80F~vv z$9#sfzkR|TD>6f|#_9B%FaOHhe;8TH_pKk^vS2(M-ye=i-2ff120#g|9}ol;GB${4 zu(b{qUuttM1Dtop=jae!su;w(wp$*Z!!aL$G>7YEJlFw@&Px%_7JGb>g2k0kjlMtu zJphFvp&n(XmphfqSMzMJOV23bzSr30Y zwlcF9jJ5yT72z(^oc3@O-pF6YeZS2|+(bT*8ICZuy>4<`Evw`D!QOY8W6?56A|_}R zx}d4nDs+PdibYZrPQ)gxq-=e|39!l)2yIAx4F#aiCMJF3yu7pi?B?d~hBmp%6-N7A z8rhsfqX{ZX9e2fvrzDx%J-d$wHmQ&{@HWbpQ=5$_5H{0S`?!R|M|3L-xpt%oQN!&c)dyC+SSQvXW0NvgQWh z&LkkL^PD?au4O$;Lc~x`q^y12?-yserj9fyK$d4dO7#e&1cxkh4I^;M4K#FMvVIPO z$Z4)!xFfiDL_$R3Ht!*k$~sq^R)?E|)1&u}-adM(xu}e5eg$8}K4vIK4+n>gyXvAf zM%!1~Swvmbr4?IwR6W*W`&#`i-ktqafx~YvuUT>ZU##BHSs%_{dv@b^_QC!#u3(_( zigSN}Z{gSR4SOKR)9!)(pr7v_#eP}`-0yjsCcu`Y1R;;x4<3BUxcG8k0{a;3^koPzDfuRQKqJj@s2fL;K45@l#jH;DKrYFcx@>078rUL)Xdm2lX*}QGeR%Rd(?` zI>H^?!B62n-{2dJx;nxh_ApP)x@>0;tB2M3;yaVJXv>b3*qPv9h7IZVZp4&wMM{y( zB99jLF5Egh5B>p^NOQy8u3@v-9T=Z|aeJdX+8ylrhY~xZ^@gknZi((ZzV`uJMz{uRW5Hg$Sfn20OrNJ3F&!A!HLd+bv zI78tAVHB%exa5kvydb3n)5u$k16i4jHkdej#Vz2h3m6$dU7;YYLMs~!gVCjntO3BP zzTpJ%z#FT>l6q|WYpgKY=3r5_{gji7NoYftD?l4r6UY$FbXKeoQF5}XILlM3LYphr zVU}VAERs+Py-rEBrbOyuwMT3q#KEkT9c<8ln_y4~)r3LeLy1z3(s{+5RSp6%j5Rl; zq*jwUdu^QSB#&QvcKG1NoAam5Qot|aF0NyN3Nr4GWt?aV18Ci|>!vXjO@SiB6M0%( zgcUz?#C88l{z|2?ny>{%Uv}EQcD(F1Qg?*A|nFWjSMdtRr@34Wn}fEr(FW@3cm~d%-}oZbSN=2Fu!WfFY3>J-4j%3a2I#|4*e9}@xx-Th_zh90S>Iz>2mroo;Q!C@6I0- zT3FG>RvSsqumL0@1v|TtkuqC^IhW_gh?!xOT%1WmrwtTcoXoNMz2G$-+)2+!4}Vu_QCL zsj;*wV3>5qxejYYa)T{oZPB=|LxP!vj{CGPYnNiFH6SaGVd z-Oex+$~rr59v!{&!B76u?bGw(e|PrV_@QC^KZ2H%6$Afz<}X4%Fy54;C2+gjjpFr9skT?i38l5UGqp+U?Yh?bS_57KudjdvHdwvVA z<4brAw{cK3rOai4eO$MRHjgJK<;ncp<$C&X(grKn43EUznOGgv*eXsiN)E3$0io+_ zf3 z(_#NQgDc`_ktKy~c@f&`aj`7U5W^-ULr7q-3#$Wc%x#Wz-Urt-mt_W&U=d(*K`k9` zvGXEccoTRm0*m*O0K(xvZsg=H3Ep-XrB6J2s1C+-U>WIcc6zV)F!MSme$z#2|#^ zJkBC!$d$CD!|%gc_vHf2$;9f=I_Ev!FbXc=Rfxp7cs+T0BPAy>gma6{=xonb1WKkebnAsB`klK zSj&%M$}#IMW2kvNltp`qS9_0P!Y}}c#q(LgDEaufH0JDhYdkoc$$0FKlF4|3Pd>H{ zFBP4QJT(WPD3PI8jqvhvIPkH1m;kbT^%%ksfg7+xfx*CL_!2XJ{G>9N{OHJjE3g`O zLLag~HDJOofVDpx^(tFMH4f-CyGK8T+kTtpWnJ?=&v0Ok&evr-eO#T-e!qDX< zTti4H<;s{hUK$+SI*(R5R_yWu;FZq2BFizfKv10wN)#JR`dKbUKWK&JDVa^2VL;ee z0K;?1vUNgawSqKkjXaRK5iH6w&nO{6Ihh3Q7X&%8sm=iaIrRNLcR*+zV2BIg zfRM&Bos#7mFlO~g9n^)Bt-&5X^qeD~-?-ff~C@GH271Jr!UZXNVAg)y`8 zxkgL9bv3F2B^6!yUTEcsoMa0!?hxRhQJrrh2EOEq4O$rj1I>p+ z$!K{Q63~s-n*r7Z6Sk{Ge?|Z?$4?sjh#hR11IlrRNN_~x=pTU5wgw>hN46Y?>1A-X z;WFnZBabA+;Z+0x86VH+*jWjD=&CR<4#}5uAHlVI!C3oKU7r&~-t$|2+rLC#p}T&Q zs)@|xfDf?Hd79|-ak-qnSwEdUh+RwqVlwGM>g&+@paiLc<~S(J`-VHRA?A#L!ML8o z5FDn)A@wzkkgHU;w^F^kcJW$2Plvg-NLOT(!Fyw%%rc6^7S5sa$ZdPjNk8vz6G9Xe zHZj()4eRnWp2rJ9^+>iB0ISFVN}=x;&Q`ktu*`_Ou>!fDg|)}9>Zc6uT-XROh^)Qj z*4+!Tup#pyGf@$t(xOLj_83-q27{3W&lWbi&r6TRMyE~$XPw3;&S9IU(&~%{_)WoC zATBUc(xA=+Hgvhch1Xg;;*&h%4W(S?I&@l5f*K=2!K5xBY0b*oFL>MU%To8lMjL4@ zh7HuB3ny+J5P~a%oD|>=!Y!*+q=2lP5jBP`qzoun);U6;retKS0Jjis2a6gqt%uMD zm5ZC3`1Tv`9K2gUj2fr7jobJtraVC$PlXZeG&WdhwbPg@ZLNNP<}$D7FJFRywjAL$X1=Y#}*2LZZ&l*EHP4ce$Dz_sy`5 zCN;RMk5aR}v3X^6cXy->V3l9Z$#A4ZpB5OI=MgqsH?|r5jHjjoI~dv`o8vw$IwagCZxOwOd56?i;XVOJFIqu z1ketZO#ldQ^OU#VSw#sGC@Th_Y@4SL)3CCV2b3fL9-SSiOdYu?&T|6{UdmQMNqL)R zP#CM$HVGRO7hYP)oii-YD1mcD28B_gEcDPw2F7o@~KW_mnT5j z=9vTHahQd8t+OFy016ps7pxXZv&qt;ORlNwE9n4h1_;xp*b*#;wSz#thrVj-)s6S> zJUn`@d00QK83%j=e+3O1#48?a7~nI&sKdJFT}AM^m=`)-g;iKh-Z7O6x$qDqD550n zY+`nHC&}@hr}LA=v#^z&0I<--t~$N`R`ceyhadc1!Pz(8`KhnzUUQ1Y618jfR%lJM zT~*Jj@6=nvn$n*#V68Q*hvU`ZSmAPxu#s$hY58JcghP8OrZ!@@o@nT66ZZU{)p#sgASA0(D*uRVKB^*uJ~%7 zIB~&ofc6heON?Ulc)N^1F!L9>oIf>nPh8N@Ex$*%@kM&g?}oj=3u*Y8&3I2|rv+wj zS0~l+;@gEz&dZKC7@H%cEX2e-n3_};2_`(m0{|A1ji!?(l*rh~+=4p8`o<*3G*8Xy zbL%_ZQFoMMZl0UZ0058angUTmvF0_k)Oy!fZIkx=fTPEPqXo#WctR$d#lI?6#M}|n z27!0!nsf%RPN~lmH(uF<)ZN(Gi$ON&OlE~7kE6aH#nuXJ^USKS)~N|ZHf9jcMqYBF z-h(60xYZIdKC_6O2dgM~L29MNV%;|(Qs*3eH!Y0RBUsj+tPU-;I_D&tJn0*<&;q%^ z+G0o+4cw81uAhgFVaN@)1WI0c3Z2$e<2>w)v@X`6&9z5MAz28?Vy?l|Sp|d0PN%Xl z0Xz5mp=Ha$?O+t7wa4NqtY1(CqlAQL;?XKzYaLpkILn2sNpeJIWl%70EI3H}+V%9# z(_4@B9v!~5x8~Doj}P#9{51AZB8&{)QTqf=L9=Ecm6jrnjD^{<> zm_u;Mk$Ahmn_OHwdF7-yxppBt^h|KbdV0Qir#Zj&&Hap$ka9kGJ{tyqM9|cL;E(fzqinJq|U%^+Ge$s}Foe)1?&7;d> z=yM52gdkzMJjdl60bo@8(;vdslN6?WIa9S`ELs}92ZqWZxEbn?cn-%zd*(mjjJ8EU zzy@)geDd%;|3h5(%XZ7?u|r0WG_C~=1~4c8K^?+h)Q_Oh=OyVd#Zq&}fY0J}&xSjrFUZ`K?s!B}(U-~@){ij9;l$B+mi zxfScw04A)tl6G^$WOFms=U+{G>7bv3bG$TR^6{pn7$+LCunsMCbZ$xOO_Q7c4l_%M z3T#2+S=fcHekf~MO^#tOD=ii)XDW}Sp;P1v7fRP7aqtcW9=g67DMaoLW&$ZN)C&%HgN%mjfG(c1Xd|l-hy+* zoz-L(2P{N3xu8C*`fDD%7$#!J2^ji9NVA} zvZCuFn{>s=?(WSCkJm#q#u6F84dQ+`NEb^&evNQ;c)O@KbAGyqmbBM~@~p z40-sGM|}d>C2&S?>;Nb_>`+{Ce+J<2$@L2nkSD#}N zG<4v%{I2~h?%^iiD5{DZS>V9-Y^u#kbzU8p$BTCtZ^t$&q)1vz@+x!|o!MZVjKQ+j zhAdYh<;cjAW6?PiOq{tLW``W(a(4jR%}Kihi|ae>%bT0K!*rOd99@9t6HOR_vuLCY zS@SZSQm4FY+Ic#nBaejylvaZ^Y~$0oo;)a4VIyl)&YYk+<>XAt+ucIW@&r(Ug2Sm! zpavu|iy?Wzg-1zl%&rh_Vf{WOt-~4-J2C{`=t9=H4juJ*5!N;d7eW@nxd^QVf=yUK zVdW+DC`?#&PR8nivPDcx+&ofe1p#IgQpylA6DwVyYz)8)Qtox;?BYzwO>w4@D`$d7 zC~1ze$_v0sC=DFG=+V-^83RLQn-*lOUa7G<_4}}Jk>;$NNVN_fcnILmB_Y?Gs3RCc z2cexwNG@dP93}+BECfm(xC8oGAJ4E|9OKEgZx>I{H~Y;i_;a|er@P{UHt8$ebZmrRgTHg{*r$-m5P7&F*@eJ1{KSp>_2F@p052rXu}E zGUd?n@+i(IvBBUU?N>)E!_W^j<@kI9LIbT5fS>}fKo65XUZPDt(xfk=pFXjYV}dmP z-2&&BAmdVJ^ZX7G#_@gq{+l5}=0Y$3_T_Zu;H&V2!ApAJzJ2s-axBI>2Oa|x&aS*& zhxfz)T^CzMRj(e5Q=?J&|EBGSr`wG*u_fgJL;(*t|DcPfwVG zmTTu+lZ2#I(P=Gf6Hd?^8E#gwnvi;QaU;tWSx8wz$`xr`_H$C!9D&Wz?yx;V5`Ck z<`J#VxV7loUk_{ETItaZOzJ%Rm(_C4JMV2mNiOm}B?l#KAhLF~Dr^Z_amPC^Vbtd- zS?F@@W)eDQt1~=u$7|l%G_3QKcL48fYNcF|I-`J*T15a@UEC<;nv&OKCanEbS`&=4 zWsieoCNKgt3<*0NwjdKy6Itmjta3?;(C@`3HZ|b{Sfma@+P>7;(_81wTZiA> zdpx%ZNGy%g+LIE*i>Btn8x(e!Z;X)_d>Vx=-Fzkcy! zX53mx);xZ8(8SxPuSM6_rRgaCvi&yv{D-R&{1LPq;vuO97>s5Z4h1ufz5{~`z_3YS zCV39OQRjO3#VW8tfoxUPj`0BYd^Ry^MsvWAEH@-Zfq|*!2xvekMltGT`xw^tgq!^I z`#zgr?R_qZ-861*F2DXmD+Pa2n#9h)7)j%dgaQOXzGA^K0HhZ&)PJ0Hmx)o$j@F0% z8hzfsLU;VAs3lJ201NEv!kSjv`CF5>n-7X^c3gC#u?yzn0K>E)<>X8jIsSKkGN=!<0C$I zL$^I@rN3jffJJP=Y^OwX)0c4#k2c;Z&lY@6|9!3rg_RC~JCB?Qt~v!=DCJ3>ahL1jS)RDTz>csX?e~jw2X}~Mrto(?Vu9{HlXQ#|#G7)*&kiD1zgESp>~qjPvdr4*_e9iaN%uVZ)cmu>Ha$}zq$Bsc`77Ryo|454>MF(Lh^us z(uiZ{Fmuh_wnF4c)pR3WJfUax+vuf<36Y9* z{dn);{yX~*n)9M7TQj{-xWb#aq}8DI4K>pOfPRpdDzV1Yf% z&nJi{)06Vywcm+dy%a4H38_^f0Uk3PY-E76Lq@%cGpXBP(htj#m6KIANd7F>lpMw; zkSwd)eRJ{Z=5Cr>l`9{8&MsxfVN9YC1fvv|+|iP{th#r0U89 zL+HTTs<5#V$tp^D3gjlVyz`JtDoOJI*;%du7)Td`STw9$tbjV_rh1Y+Pc6b&2L_lk zgp>e;U9PMuF7h;N^VH2FFyxo&Bh+{GNXe_i%)HjFs&1A@;CHwNB2flj?N-&H49& zR^9CJ?m$v7Fn75k5ZFSOnxX@IxMMbNLI(z$0I)o0S(CY}@;nI}54s2~*kjnB(}~5K zOfC1W&L*L=Xc9VWG?Mm08ag0PJbJ+!vVNa)Sjz=CPmpv5PSda@<7^yOptK*7RdV5F z=G9Bv@@(;R@y+YsUOb8sGu*&eaEJziVpJ1e8lnykC#Fd=v)W!^HE~;gyZj(L^&Hk@ zUX?3bFo!kZNb`*4?bF%G%TM>86>Bj#$N*VSj%N?|9vr+?FUvGN^{A0R$W<0X9AYWV zK_+XfSixjjLP~W=+c~w_R(xKa<2&*@r<K#yHSqivTw*ZSyYf>`Th^p zUHC`Sa@Lny8%K$5(4H6}aSsK<5m64S&xrcDqD3rsm+oghrcf}?y497x*+?A#nBqk6 z@kW}41deF0Vy}m1(Xo92mpnLQMEb}lDL7jk|NBxr3dmKas9nl9KX%Gd%&fbjMC%n< z{F3(uJf(l(tzn|oEZ_ zPzNUEzTXcW4A5(Q;SA`Ehc$K2Mr!1cWU;@-TOdze!Ya==!EDN%MUO~>tc{Y#u+v$; zPaQb)*ygEM+_E`aDJw5@HZ*eL!8t%SRzTUT3fpvDR$4iORb*uox&V6#<#A^QSRGoc z+YiBZ@a$?IRb=|bxzxe!vm*1Ve-Mm#Q zPjP@B!`Cn$_cWIg4-tilT4bmxs}h4nq7=K(SHDwyfD81Y3&tj}Dx@q}1XW&r=Iron z@7dw|*EW*I^C`4dnmpQn^Wd$6N0UxkHgM7Pl{2fTM>mEnv*gGyuvui?9k7y7%Ixi? z?z#W^XW1ssmr%EEms3w-(;N{HaCdzRy^VS2aTNm{`DhiIo@7=k!Z|_ z5dfJ9dX>B}{+eVw&jA3c&)52l77M6laWmG@kn=L3=DC{Zql?w_RCs(8UoG!2P8H#5 zQla=VKl>;tsFCF>V)cg&c?33kwgGJVvCV=m$=z4vg*YxCjyS z#^(PpxyySpucfg$AJ_q!c4Fmn@^<}ra?-pzSw9D^=A`(y`m?-b0E1$}?d@8Hrq8L{7=7Cffvdx8Dm z(6H-;c+~V)tTutMa-W4ei+Lg|NDd*{nA8LC4)7sL09J>#pA~D$7AQOUBy2P1hA(s) zS__Eb!U`~h%xZKFOpQb5LJT7F5E8OYIDs8r5)UD1+**|z($IpTx`25_2>`g~otDl7 z&Kie(2LN_+4jYf5wdm~7rk`b7&yKIX_sYAAZ=0Hw_5 zn`>E#*@P<&>?j}B|2#fZ1S>D{wV<+Pv%;ctH{0x=zH(7K`0RPu#5|lv8f^Bse!TbA z;e)*g!D2@!Ok<(DinXu6h}1cx&C#u|Il+usjbR#*RJGb-iB`_=Fm`y~rdp>DDqkP& zWt*OMHw?-sCT%?5&gER%V5Ec`yPKUs{rrckN&k_w9J-=)4@Q>5&LmrAKu{p!64U}C z-W&5h37$CRt4U(C%d|`PflDc=1Mt}4la6Ok#5}J59SH%BjDCC^U-_F2Ns1rE6w|TQ zTvEQ{_^3-D?sEPA@vnx^Gs_U(F#K-^22hQvoZ;`7eemH9{GxuS<>=wf(?3_u_wg0n zOY`ID`Q$-EYy~k4 zkpQDUPr}AZ26efFLGmo@9KguRG=O>!kkGk=WWdB&y4-N`;9M+8NeNbk4cKZJX^zfC z;;rsWXF{OXA{5yf1#k1jnGE9K1Pj}KpOlhp1`tqZq{W#|U@o-N2>~#+GMI7bz?>{v z9OkyZQE6vSZa-eUyLcquShReAoA?}#&|oqOHwQ8IFqZ};rA=0iedT3%DMDCwDBP;! z-F{!ld*ubAM6t4otaH7ab^FWN#Y@MB$IaPP(X)e;Qe2kji+2v*UObweRxNj-*GbVi zYjg`Kn{*Bclo)0WT8JB<4JS@LCt1r5Eq44^w)RAy3a18-d8S>Q@PT}8K9gJBZ|Q%A z`q597|BM+$*B^3gG6eU9q*Z28tbe#j%Z~br&Xu{5YjkzU4m+#6hxhw%|<}ZAh`6BE8qyj`%vz0%E=4Un?JHL&{B1SEq)!g z{<&ZM;yU4HZBg>ZqMTK zv+FzC8{N$u`#Esw3jkc^HIBXjVCBT;Vd?A4T5sa+FyElMFyV6e(_L|1Zpz2fme0b5 z6X1~*r=)r6g_}uOnW&J2O`e90P6(Mvc;~?;+{=Yd!*It`1_gty0E0=xHkZ^J^VX)6 zO~@>UofSwH!`6daNV<>(ythjyywoI5jFMZ$DSbw2yliE4OOLvFr21f~^GC;> z-KQVJw`^jN(D5>87J@Tzu6uZg?oT6qK%tk5b;f`)^adWja+k+608k7cw)IrE%ReJD z00Mf2U6H6SHzy4FTvh*zxa}R9Y1QuF#wm22m=h4pa6KBSDptk zkbLy7iQt%FXM+{!FxM1U2hgR~XwV4#NPa*6^{qrLAAELs>*3dLe&cWd?9cr5|MauJ zQ?{fgvd*y6IY24iE7VG=n;r52ktunrJ znRt%y^I+j>#BvVhQ(k+YCT){$xS$afm_U?M*oAexs2_2XZRo<5I~NBTXR^#$$OdYz zslnL;I@-ZtUKCsB;tX}3a3a{ky10QDh2G(U?B>F|JVnglmS7cucTg&IM(TkKoFy>z zRGE;XFtG@e6=0>agSmW`uJ>`st|XO>2N+U+O_q5g8(qYw{XRhMfqM@GH=UA#Ad0Xx z4wk17829}(Zh7Zs6*QN$8&uM)I)j-xvl4U$9f~Wy6ykc}pGGVG~ZF%MAdPrGwenf<3mH4Rc>Vm^ zv%^RGOYYGN0I*U!J)gh5|M1|=#c{Qv6wpseXiEV(ZYVgE17Pti7o;{)?NtK1W>!<( zVlBtq^LcvKY?lwr5m zIAz%ZhVD<{l;bVgB?%dLu8gS%fb9=xTfF`QWaH%K9AN0NMU5WZ!Ti4jg#n0v2)U9u zCRmS;t42}imFeO07WOgS>vE2HzUZeBpu61dT)9Bo#|c3hYbyr+$?(!3AZ*9$Gss_u z5U3aRM_LK3qtgHWzrU$|^>6-*yT9>2`Kd>L@z*~8oAYC<02ec7u(5O&i)C)yoUP){ zMcRS)#G0dvp}X1brN#R0_GWjK4#=LXXoiLp#vM&S(6D6CnvyA&sn#kT*-fqki`C2) zQn8Y)bn)5bQAoTCN*(W9oPFX9BjkweOg-(gP}YhQG4H&fp5ap`Hg;xbyH;$VVBSG^ z=M3mPJoN~G9HA$ptpzZ#XKr~1*n|=?G1LkZ+2n$Xut|$xZpE2JLY{F;8g{zijYWs7 z^O%9DlaRuy-{)j8sFl3V6(?tcu`{5H_*AC=^~NDv33Dzk(sk1Q8m}mr3<1xw%@f*L z3|lWqVPLCV!diA(hTaP9L)T9c!^S3LWI2Y7mku%lRGac?XnAW>Qp#DZ0)zVoW;+;L zo-&Yf#R+0e1Fbz4YvUwodU5U9wQt>itA4*Yjx%fcGx!4bP@_T^Q-3dii^Xs@^_G@3 z0;E8taaTU&HXb8~6>lA&;9STAnuL&bTeQV7zt7vRUBrPh|Z_aNv z*Z5ldlEk>bo--M9Kw-`{%%9PbPsnEd_D+&%$4m(8EQF%dx|go$fi>DcjZ@C(v1U;0 zP#}XKoNOQx4=ekjeKH&}Ca*>H9IR z{a1gWg%BLsxcVqzsl#FFD8}8BA)|+2iU|w_E-iJKKZ#dJS9`5t6LdDLv&RE!__dfm zv49u#M_6lgK*^*>kN>;>=lAb^<1hT{*MH^j{KB9A^S^ulH}@V(YZa6=bZJgW=f-3f zxdUXqJ!DIDI?#Cjh3!#$Piw86orf4_8kIC*Os)+G8ag&U^@L=)tGYcuFs4elKn*rd zoXcm@Rma6eaTYYRa4SPHfrX9kJ9y{n2wRK1$${Xo(xY=&fvw0>*%141_rewd-Z(qE zI4qhFfxQf!l@>Vx#GX0ntT@vd^)Mh$xf|dzKssjHc@Y%uEG_Ty)WDfw$~`!jvg#MI z3Y|;n9AvBn&K^TI_y&YTPL>NF>Jg-K=uN{TkfrJW+n_; z7zpixA{kpG*1Fi_0vvh+D|S}66Y@+}fE6xe#nK9wJSDTrnOm=|;Wf8pc?unz?R*Hd zW=45LQ+0ZDOlLPvaVG5z$FP5qB+I==_1o9KH9xIZlP)1Bu?Z4!hNvl} zekQxVC{ylHIJ_ibwF$QxJuMeItZl8mKCQO)zOAfR#jM`g6otMN@5){~+k08XCQRIP zs9B9!0jk`o%SqnReBdefP}G=U3*uqI zv8y)VVC3p~1T?8@7!PF`K`=E+hyyp|LsJKTJhJ8hvJNJk!!)%+4+f*g_Ctm_K3D>L z%yU(m!6QG-Kv48>v}3!v3N85mvG*sxl4VJnC-#XPIp^N1SM}+eZE$mQ^D%r3k2xYE zqH?IL${G?~T_gw)=tV6EaM}GQ5L}Vy6#)XhWG@J=8eDX-YhqOwD>JKdj);so!aaO2 zH@ET4`c$vpd(S;bgbUU8%(Ia0jwU?}NWf*`=4N=R@9KN1N3Mu`^85JHW;sbN%;6Xw z$MEaUu&%*C4ARfd3x4g9upo3uC6*yQ{mxT&zOnt|@BYPi|K&gV&Ub(BKfV5^dvE8G zk_o3AI9W+4hb;Z(`LoT9_WH2V@8{A)1$exXMeE<5Zo{^%bi(UI zM3A{_%ERKYIF^B}jPTXrSr(?G?c1^ChrA!7GS-G-YyHLNOF{dN$ zII6e~iU6kA?hWbug%7U2xA)8PsJhR4y2)4ZI;N-**1d~WO;dnXlFJqiJx3un@2YX@ z(&(W-^(Rp3T|upq4#V2w!^)22Fj>S!_xhn22n&Z`}rz3)wbx^s7Y6dH-F1_T2K zu(CnAVUxRo0S?kChbB!-0ZufiMmB9i7u(^%418*1jbL!9+CbJe(#56q z^YXGOwyL(gUO3tOP0y3~V$QNkE)^D7`Q7Bp8U;Y2Pf3B5Dqpnn5&|07I^kSQyomYp zNzSi35)K#$T{+b(K3crK*!ds7`bXdY_Fw$w|M8!G_Zz?Y?Ncbc1v z=Z4L=nMW5=!V7Z6s<-dqR6wA_ojZ3&G#|opFKy)OS_(K6aLUO=GFcYK)qQD;2b}UK z9Gj?jJuqx>pDNd?V$cF@u3XNADibmHT3A@|wph)Br8SqP+~taT^^^=yr^e7+8M^^J zr(7BN<6%pgmt<)>+}BD$JWN*dWr|j=IMlq<;4&o*>cOrd0IB2-oX3c{f*Q*#Oxs54fNwGR#@f);Xaf(pslR!ItAC@1QMt(ET# z6v!1=SAvL&JgG%WtkkLyEaaLxL?jZhw5gW4!V1ose3NQ0KcukdTIQuIF$u0rPUxa z$I@$M6{&`VoSOZU-IM9T^tfnsMG0U9Pn*7~hZk<2J{$G446=zv_Rx|qt<#E?@Q z73Xg5xYh8_LJ73!RaKA7MaDX`ZM70`#6oJX5 zEPB8kVLgSp5GbsRXx1>|{nm=!@u{(zxUdA|K5+Uci2zc!#IzD z#|_ifU9bbKD;9}}a)Rg|#mcO!x~sUUW6vxeC0ycx=j9{UmWRc$wA@kVmEe<>W zR2pRs+@#9-Sh&V`7_IFCiL(VA7Y~%(l8kZ=P*Ru7o46%R0}qtVvr!r*er8^o2O@LI zCY176gEZ=0W2b5APi^YvPK>pnWPuV5PIJ(}Q9ZmdDbxyOj=Y4J@`45{Xt2WIVy^wE zgNhr}vl^RNkdE6_b4JpFdJ}*&RZ#9}y)mCA+?hx}Ot>SX!5sA{s5eF;ac!DHO~Wiz z1R7`nv~Ud=NE5fr8~zxc@`~W59+0`Za2$7}HJ_Ymu1vT$=02BD8UQeHW-^snoLrmN z?>%>?zEgiFCo;hvZsJW$QNyp(46U_;URgQ863{J65NfA&?@-;V?h`PV)*!7c^Ipi* z z%6_2%NkPhNq9rtrFoK@lJh}Dg)wBI(!#1}0E4cggJMd~9I+xtSB^Of}mWz!n3R@t3 zwxq`=w3lNMSb<>z<|sfYbiurq53F90fVQfx1PZp z{5)!0%+>gkb0$iWR35qox7PI=o$Id;*C9>>6|)Ky#bI$wHo6y%iweO?B$e(J#gH@bdw!xrV(hLs305@83PYKEdSjDYdripKi zHBd4)jKZ-6O0LZn>B^Z#3u%TcJl9e^DU_I76GAHeX?M-FDjGPsCKudmLD@jrJgIpA z&XOC5O^r2BH0K5_@(7U=^{EEakP9A2k*vs-8#05l<80u;Ey;2)xCNOO+~?B4wYkU} zZeeWV=c%Ba3u9I-zy=<)0F2$7*v(SKDOEDh6~u(wRB(d$R!Lc!w8h7(*F?$O3dYk- zhp?>gUAeRK*3JVws2Ce~3SYw(Hc&u5Lah@76_C1CRbxA$tc8={$GJLmeR0Hdj=2eBNy>w|VeSeQzK9tmCL@DE0o=VbQZ>4S7lB@8GLPkMQ zcEcz{h>Ir5#d#`8-4c?5F#?o?qH#Amdi8Ag7?5zPisj+KG4meQCI+-$hQ3vvWh7$f>qtE}Kwi7-rEuf#*Hp;`i* z-BQJXY#y4Yx$>tPz|@m!?Pma>KwrPa*}Fb%xdvICkqJjimJH;0&_aV-TIJeQaib%D zsx|j$328!uYXC53Q`c$$QLhCh6D6`-apXZIRenyr`qcyjAqlr>!X0O17q#M^l!(-& zTvG%%QOZ+_K(2g~U7k|Q9cdQkIN_x^3kFr!E7R%}5RP!jT98`cm@BZBl+?RkD;?Am zNG*`2El#dawaRiU^U2oRFWjHpDLx1aptZeF%THAA~!5*U| zxw_|P#R1@ED&(bg8Qw`?JyVy%;%2jbvU60Qy2DA#Nh*w9=v}>Myq2 zsSNvZOI=q5R@T0)Qmp0B41!A}AAuKQ z-9Rhxk)ztW%MFz^5R?|QyZTxMUmpApL-;h2bWXq=yk5J^SfYSiPheKhb0JCqN_<=b zi~Lc49!6N3v|SLO*J($y?(&0ANEhLf^=25>)zXE8VogDSOON!k)x>`u|5+%V7#95R z{+V#Qoy9_0Q3;S>@F=kj!q-sX0sdq9Q~5ex!L@Guw&sMzG(Md+P&x#ZsFc{xIZ0a_ z7N_+c6}JStR=sN|4O1woxmnF%5g7VHq*x&69HGBa{uKL96A?L4AJx?a^^L zb6wHKGP|S_{i^(A7vMsx;s`l|qRdwXuu2X{181C;ST06qdXB@znHFW6`ZA_TJ{qp; zWao`$&yQr>kBZ6MhESM<k3;h`>>U0-UAWY`2#i2VXqhpIu$z);^gPy zIJCuKajfEcS>%!vCuvmF11ee}nV1?IOii?=6pn|QI6G!@t~Eg*Rc4{cgK@6F<~fmB zYZbr)kfs1s%Ul7jUD;p2($qB^O~?T}KzW{OV-snNT}yd2+|M;7E!>yL_B8uc)3oVZ077c_{aRQq_SqX8=b*99$fRUwi#~=$mVxv6aj9Ny~+CUytQZHk=YNV*(c%w+_Cv%C7)8mK&(RnRr3$JWQS zf|OB3gvXHfHN_b=`Uu}lZAoj10Kn)05IcQrV`dlh0JcwkB^*r)WUMfrt5H2LtpC)t zU7A6`oaAqo1`?u%q-$fh0km$^Mf50uwb>egPsMsNlrLO&R!TlXynI!FHmCxjGK5y>*!N?9uD0Zsh!7kuz&RQ@|uob3tz`E{#^bXzlAq(eZKLi zzRjsTaGeEi@RR=2ixVpa0;^6qF>?!KVWVWh zf(ExRrk>c8dn>4ynO5onjxx(rsB3dg10d&V>^cP)nkyc3#7mi_nv`{A8p4TY#>6^- za+hiofMG&87cLJI?s)*`TIMuZVUCg5^|`jyJjH{h2j@b22>M|H;6+3}#kpq1+l8kA)QN67*JrsR4gV=ZXV!T=sbVjcme zgygNH#4QzMG^8RHoMz7*UO(7+Fn(+6Js)MjF0SDVs4+%>U(b1Y#jaDw5~(+&)Nv{( zICWd&98P@an&K!Nq{8)H0S2kdrldp4+Uzf?^ZM@9gL=S1)|?a6&DP0uwtZ)ES|5(i zr3Z4wgFzjo)n`_L0m7=F=#}79dJ{@A8+<~>xwxo0!zm6z;&)^lGxiEOiPNyH8|82D zG>$?Ikt&QeJFgrl8LSSidLSGRmD2`td*JktV%x5`EnC^I&A~+6KWsWw&Q7+Fm>U5DXhQTQ9qQ^jSZT zUw@>(aQ}t<*Y*1&2dhZ?@hpzsbL*=&t!}pd>NbALXMQuV&^C*{FPl3?%)a&D;FT!Wz|mLe9{XPb|9j_TtgYbUG80*gf5owrAWN_*A(ahs z!r5ni+xw(M(u>C$uT@*kDeQg00oY5;hw`tm)bW%R{Gd2A4AJ4GTQ2Ij2;yjgz~Z)Q!rRfKVGqBFbquW z*59?p5*Mw#i>94IkoEJ_^J|Zo|BQZU-{Sv0{?~mOagKx02fwuuuZJL;xT+p1PDc+X zk2W9Hhs?qC_-y&NdqVN#BQEF949N1OPlTt1uqHQQp^)>NWdJ;xh73Wf#f0FgI#MuPSZ3M z9K%W6CK&Qq7O8TLPGp_~R2_y~`}wd%Q5rHWc*qry$NpFvWw48B3eKQReX3mtc60SW z8u4I(2J>2S%gJC~gNwweBIVW!FcP;0^`xY(NmEJ&nWtJEK!a6CuFE6Wkg6l5UJK5y z(}GlHV6e>dByYOLpXQP}N)QusJg}xMZgiCE6+giZ8QGmbJ*)3t{n^f0`K#(w#@N9w zUd9$`gv(nsx898sP;$L$LdS+YbsW;T4`;0P`)o~eL>@Ku`R3u?!^z?FK{?Nb@3}J}WrYlmN+sXqQaxpo%&L?~EL!OjC$M^? zu2`b$Q}-^oa{NnP;Gw1%I3?{i!nnICPiqK!$x9szh6aE+<_Y!5hgLaGq)i3HwdA1& z9;|4`F)a2Uy?*>$vmeW0Tw;Vx2$G)TU4DR5ExP^o%a5MBU7u_|HK6m)1~?)wD|iI6w)B-RJY1Uwc@GKd>Lz zw*5mw#xc&rZrH`u7{tLTDPx%CS?C;xIdvL*v)@c-Z~W{hZ~nWR|KW|Vzx4Nhdh_AN zp)>Wy+*2YkQn3+db2bXen3NL|B^?Z|Cs=STm`xo)9S@}Hc%bO|p(dpaHdsjsh3h$L z1zjVUjMcI^Q-|b9+}wh>exHEeyq{~qy;g3%rZjsvN?OX?ya@qAb}~0uFtz~FwH@@z zBa>6EV6HPbO_j8%;+As;XxQQoOwo`l9^5jIR45^n!c$LJS+UWewH5#m##+hT*uwaagut?w4AsSMO5tq5v>dt`AMFID?^_4GKyKrf%7n zi7oZ@c{^){aIE9%Dy=gj2kaNBEGRneTO9z4yX9b-VF_scZWx^Z7Gz zufLj}PE%&$RZ>>WaE|wIA2Uqb!{UTXm8AwmifQB*;Pz?<>gY4JE_hNY2RL7Kl~+K` zVbyw4yQHOEtU(f}6ns>%c0r5=1|-x-yV~jH5r0u1S;(LMN)i+Zmj>1YF8miC8^K|9 zJ>vOqZf+R>OOF|CgoF|+3nPVFKi{WWv=Iz7C%uqABm_icB%j}Z+P#P1R4eLzG+0TRONy(#hBTqUYVKWYLA{%$EjO&FW!Ym;rmO`V z0CA0}7TlX7P!HCiEKRPBrLmw4?^>iZp#jhU$Cd=i3Yq0vPSe!Sa+wQh0N1Kewu+Q` zMsj%sO~O4zAQv1pxZXU5ToGW%E>cPp8v3npnuP}S(qf{4U;@x;Bgf?toQbiE$|l4# zq_KL}=bDp&)D-HMknAB!8UWWA=ZTx=ng=M@wE!uGTxd;znkRL09j$&)RyI35&9^>y z;r8T*(}X+a2)lR+uVWK6!X;EnE_n~6)Dv>om6_Fh7FTEKi<9!mHF9hsbE_O6<^yL% z<%WJIcg^1E^QU_c#toKYoWM#5-FRL%d+%;Ptd`?PzGpSHpe~I`Ia3B)n=5Hap+n_c zKTqQqiQck)ui7@-58x)DP zgyzI4m40b}7$aGUj9a;nd>$Vkq&Nadzy5E3>-<0dlOKMu=XdZ9_VKmicaE?B zsNXvLO58kp@$AOr_U4`O-Rym91!1!I^7o#<{c!I;zV?55>8nrw7jM6GyB1b~A{W3oyG%p8GXkCJ+Yw7HPE0VO3kGXg0u(?l8*W#|eqPRJ8eQiu}RHMy2KDZH}G zhlwh6Jfx|PTyFx_k`+C%fmmy9kjxP>Ln(#RT$r>q|IBbO1J4Ur6Mxf|agFn*}5|+w3qNS(`DKU`hexomsUO&8fdNXdsv6BMZ7^$Mc zAwI-CEOoDa>Fn!wci-PUtsf}3kJI@yZY*EuZ^m7CViG|GM#2dm;Q>C-GHvuP9DVE2 z^lbbv$A|w|xQc@iZ{8hll}DUh(qN?};{-%n{{Qu{`Wxa2RXH?U<&=DR3>W-Sne$_W z%}4igOli5=#ZLgzYCZ>?gD=w5MfzY+sh?0+Jl^Z6(65t($7&Tcf8?te3J2x>lQMf^ z&R`@2C=5L^2J~>3Yi0z6(@(k{U`5NlSY;I?(1pNyok~rR9#geHk6(M7Lyi0Lg&(~3 zy?0-|adbF7-#EY@^3T5W#iMWi?Ao9A_1TNd-IG^NpRZ*rMG|c z&HwP+|M|`9ul;Y|d*#md9Wiwlcm{TTu2xQ(X-rDW2~f{HC4v>kWVs}m*8(bSoXRpy z^T_qN;-1sWV4VgnTx+awL);==xsH;$9?a2H8lAY#XvHYbmCW*#)z8w@wGh{&8Zf4T zk_L60sUub9h#Euo#;kCzHK>OwlX5a8<)kT1{LG+1Yl>;g10^%{nW^VqQm!>P%@xIA zOBSvfwn*LF9E4(?5X_|sfqE1$Wb-TIFUomBr{Gk}oV43e*U8bf_ix;v{Ir_M5pQ7^ z&*EFyM77@IBM<}(fxy8f>*10$p2>u#%+tXS;Zc|s2mUk*k^?~o>4#0%fO9dF%~t1| z>7)JQ>a<>RhJn@8r*hbNv~han{qe#0kRZ_jSeb!jzBr8=F6NSwX)bsmu##R_R)7_h zhhQo3z`Yw>9y%E+>Dy{Kh-mKWFpTM1o2#Ngy53KDH*A2pO5-Jiqm~K+YhoL5bc;OZ z&LUU^=q6`3&TbvPw79z1&7t55oA6NW_%0sseOS8H-?;ak2Uj0W9+k%`iGlf*VJlu~ zUrO8RP%;X5FnTn2AMfFw*8OIDX8zp|H;zXqE}~5w3zS-MkEVlx0!OUu)e|j=htLBH zTl}r8a=5V$)KR;n zlngC+ZT!n16qrLntE9CSN)y24C+W@jVlT)*7@=7=>J+v%W*`uMa>5}DYe3G5sZd}E zU|93tR;;$q?b)7WSfXRV@!{1$qH7|{>oHVmJ zwp<&_OeSqK44HC6P zk3e~CRkpG>Ytt_JTtSU^Fh!v?MW~10}7LmE9oiO1TEW4`X+(fl@BW z%u(dle6D1^@?BDOGH8FH_0L*ohMq+6NIc$(0_B*ThOK0ck%6@ADlNdnY zb7JnSq{PB$D1B!^!!V-MZ#H}V=ikCgci-Q>8zK$8=U)3vsAX2T z966KfG{REVX(1y46tT72ge^-2JLKJ z3tSxQLnzN0UQJRy3d^z4?x$1)D^byCUF{5OM9qZ=;X*_}P!P{PRn%oFawrmR}O4*AG+fATn4s1#_vw!BZ`8C{fI$ zEl=F6IB>IEQsD*ywJe4-4G-g9JMOM7-RaJQ{gWbMxM;$ssu?df5BKg&?v0vaP5?+r zjV-2eaW-r~O(?5STDh*G^7B+{Fro~xlsHzJBTyPNX^bJOW2o=Cz)UKBG*1(@TI*CO zid?#(tU_!?;anpD$x4Rnj3K$C=#mD~VQhT<)N=Rexw9Lmw^Xbwxx{q{TAkxPzK<5t zU1{Dp{-^J4oNV1OaHq)Sa@xMyJsq#+Yfuu$6+9Ffr#Qqfa2pf7HM@2Gd+$x=VQ!Fz zIV8uuFKF;S7$vDgbN{A#*JkwaJidFby!7WLu7k$yej~w7E;PfRT|Ajtj?zaIYpVk_ zA;Yb!l?*{z&qly2BZBpj-jQC2haE~}1a3wb&he}Bm;kV3IrYuvSl#(3un|7a!@~8g6rq; z$zdIm$=l^ovL&TOxTQzSj6M8=KPLW@SKrxszxd$B_VwSo`Q_VB{cz{qvum^K$IqSJ z935PJXZnuI45y}!o`379gD<}OS8x0e*Z=v|-+Jx4zj*3BUxibO6rJW8(2y(Z-BL#! zO#q7P9b!&nMyh2=1H6_TQ*B6N0DzL?LH)1+hs0)n<*VtU3Jv6PL4$c7j5%6K$-EZa z=Gry6@^cMPE4f2uq6PJ?O%pUwX;THG$O)`94Q}pI8o`^w=3bRROr4d~=BnH8%elYv+)tl6bMJ5`iMMbKU*t_p zE@3p6+%vF>5;C}t8VmEpArz=vX{rN%?q>c>i8Cr0xOCpNP_3+pA^K%~@Z#z8cs!Gy z4F*=$s`JCf@$S9pgU$QJLIz{$2&AbbRUvQ!%QB6iP*T#>x-9{4?J%Njij+mWEKvrf zG%%^f90JtSVCp!Houk3mVF*$T%A(o(!G@#|-y6Ut92vezTYxdC3KF5)Xm%F6hc6$! z+HVXS#0AD$Gg60!-_d(~jLq)W{O`=Jy|@2CXu=spQwse~yVJcsOots3tVIF95=VH5 z_tB>_ym?!$*U_KQEXTSF`hcyc9fq3MYm)#j)M6PD{+hpMhlDlGUoir(lnq(n!e>V>l818m zkbS`+_ye0Td41p+#X+3H5vS~xb(j!yWHvx}0Eib)B{{u$^6JUe_G&5_HE+PFLytrLh2E9ajr94$ z-#OjC|J3_oCQWjt{dV)z;)VWN+{rs&X2BSMA>lsm;~@^?1~%I-KfHCPZo-LlQ4CA? zQ+NmQqt;gr4q$0=<@#I^ER$vr_`~I1hH*G+F#07Di;7FB9GHLu{mg0hPf8@cKr*?g zB@_;dE^@folDWX%Fev1Y06I@ZC(m-gtF1wTqFCD|Ja+DJD=5(C z`Q{0REvd88?LSxUg;5;IhFnW`0Zn7&t$W{n^o5_k_tGDH?U$3=a$A1%@;9%2?SrfD zZoWI;KmEe_-g5Kc{K_w;w?lNjI>6b^>F@p9uRi_ujeq;xzxd6++kEG}TR)qes&Y(I zYGu{XDok9NM{cQsqXhyDq~^KLg;P^=Kq}>Q*fK^YpG)&;?3Q^f^HkAbh0JrvwKN*Q zR&b<5K6^jYz&+SlS(;&59LFu!nB%1e?g0cec>)EIA?2F;VaLySFi}qiK-J6KLMkkT zxbox#l#z@$@#?q=XsqIa+hOWr8l{@R12@AIoX56ouAJ^Y*naoQ?eezI5-`Fxeh+)7 zP^>heSS?hqQcXxS80j#G#a!5yS6|c%X^Ycv!~@TuE?MatR-5vYZK%*%T22=?&bH61 zhg)Yp0h|CBOB&CokH+&W@0BO@Jj{ucXOoyp?v;zvxWyfb0&GlC%N5yK3o}mO6pT2l zCN_|CJouamPJ0mN5kWln*CxE*CWTIV5i^7>JYP z&T;tC+y70wp`~zvZ3q-g+{ax$P7SW~w~oGcu={BL?a*m5WbWnsh5mZ`%&?<7V1{4> z0?^b2&X=4;2-9!^eti1OBsZ50f8PIt*S>M<@4ffZk3w{FQWH|{v_vK?9++sUwF-6c*)cRopDNC5 z6iw3DwOa6?aErVrtpz0$*J_|VY)PY5VQSG;OY98~}-ka-w(T$4uJlal6IgUlf4 ziCw4O4V0ixa}^#8TkN>Ezzqb-1K1px;;_Xn$6Ntm&dN|qt~W+WicAc+9?5m!RK(-)exm z2n=<%FD+?b6-{OWYhFn$mU%=8I*<*C6VwmpVv_9CB)O>Uk_jMiIlu=W9Z*#?$i#$W+zwQsT;DotcA4|T*&hmxXnDkd&M^SCLQ^YU-0d;p-u zt=`0~!DG}d}09bIyu3B!u$ zd|8{=`a?k=aUcI&3SC)c=XHba!ovE3qOh9F7$1M)FU#Y??f_6s5kG?dacjx==TOfl z85EI#VY3KX%Vodm!nkwDJUXUCDVGvc*nITO<<@QAYC$Paidi}T`~Uo_`#*m9M>qf5H^2D8Z{L08r;}su zSKcq&4-*}0MWE<rL!32v4rCY&r#;z)q9m_tHP&qJ<>xi`O}O(Rgu1)EAZ&ST>oC>zT% zPNmOP@{~Eb`LGp^4O(W`?e=_p<>B`2y|+du#X}Ulji>Pjwq(2>Q>|qGyjG(5NZ>YW zGx5iZ35kakJFPUutb9m=Yh*UmGDt@wPUiE3=NS6^92Z;X)05p3cd(T%Ng)!8zCPc( zJ(-OUCyzo)>N?h8sxQaAj{~mI>e*Vhc7k^S@4CZ(VWyT!B zoe6_DPt5U>)xZb~fI5P)mZn*2zu@rg&ogFO{O zu}r~tVCdF^ug|{lqu+S-55NACtq=KZ`!6?MYkuQ{{rgYfTkfAef4+VD+YjE{y1n;S zI3@Ix>Xc>w_IH}E|L9lG{m-xcch6sa_J8x%OLvM?J#;bda#H3V1Xh+N)m9oqDOo`= z*94er&2d6NB7nhJbP7P(zEV~$x2 zR#UrL(srl0BqN1cX@KW};FoD^1-EXIrWz9YxxqyhR735WLE394*AKTo+<&k9#l+HS z*ufsYfbU>}(OM09!95G`%Ip#bQ(6qt*SQw<9L9B9G}S#hHFXQ~(2%W?;0NQ9uIqQoQ?OqkIpnd6;50TMQQ(0< z&_Igh(h!t0#o8aI5EBq#45;%xB?@t5E~v}Sj~b2`@ig=#)XU{o72;4ch7lo$e1JQMX`Ej>e(B_?!}>sy4rp@Ksc)@vZp1!$4(XR)`~J&U?%mz} z*<=R~@eJDlUz0d ziq9N(^8_1f=zz!iFatp4g)!R2lDz>y_$Wufr<`!v!YTn!Dak&vm17sxNqC^2{9;HE z4gDqVrp3yzNiUE13u`pu@G(zyQ6XIn{tbi$YUmoIgY}hy^QRP~CE}{8gF-Q^c~Or! z(hjCs_de0)?eq97gE}k>96CmF(L$x8E`iZ*88Z)~?2E==$br(<@tc48(hq<6#sB!t z_qXnZJK-;x0|7Gy9N^s5>v^@rRymHxiWFRmNd8yNE6os+@%tp8m$T9{&dDRSm@s__WAVhbP+=tHbs zDk{-hi}UKhb>Sf_lMKFb2^IHNxE3i_3Ei}>7S-|YaeX#j;6k}6N&5PH=i$bKtp`Ov zIuuprlq&9rkxMGzJo58yr#K$Q9F0k##uS;sNDfewOfE)Ak_t3K$V1+sXaaRWf-+Qm z43WX?nGe5VwbC<0}uJ zdN@7cHhFiHI65}KrIMu%@R?WXa%%C1;-7tp0T0mQdux30sSL_Ott4%8MOh2Lbiqd7$SluVF_SIyjw)35yH3-7%1+V@`m;gv%^s&9Y!rQsVNJbnM>2hG)!XO`O! z-Z;56ef0Eyk}R#2$}Wv&Z~pxCpa0^EfAHFWcjLvY|M1SsclJB(2|3UTXX6=Z!Y!rj zIj4!!9Hh^Mo5!ges3p)~keEl@B5+5m<5a+`%C5~pYf6;WOKXKO$6OhPsm$FnmwD=1 z0%sM!NE;v;py4Fdl(b}3Ljva@s+DUEE@|Of9#pkVg-*KqZ12I|?cMh#r}#xF*u*t_ z6T6tMx7=5~0$B+HRFoLXExN@N0|Zl#QM)lOkDU4ge*~q(plp-T8L?}JP3f~FX}8b! z&$bRW=i$8QWPNL@p_5^Hx^cYscD*R(p(CY%07kM}nHvHN0JvyO>gTxxj9D|g1XV$b zm9)^l%*bt$$Q+>>+`>vyz^CXHjsqkGMOC(1N%m2Li&lcUOPnX`8{}k?l?MY4c|=L6 z+ibQLTZgw!_L|8sVw4!^CX}Nd;Ss-&8E)ZPf6M)zTz!bW-fujZzMVsRWqzxBzPp|` zQ9u}B&1#(C0Qd18j__*p^6cvedv{0k&<{YDb0U+p9h!oRLEuzU9w9jog{E-ll|Q-h zbH0TZ9k7<0k5FKQZqsy_a?4SJYdGav&W4E=)MRm4bXfsTDY%6!0FI<7APz#Eo$%k* zlw*m~MHR7nBV{mDFNn<-sx<`(K58AHD|z+mL*8Ko3JmbYM$Sd5GDdkX6`yzw1!6aF z0@f|CQxph@mz9RQybhq^zuAA)fTZ%#UxVQkd&t;8zpj5SHg!JPN#{*MiNz_S2Vse*5J= zzx988>A73~;MVK6ufFRNfg-12YJ+P@!IafWGgPd~8mQ!)D%YDM&1HE%mj=>YyHuX~ly% z4d`LRwAortj&|;DzkB6j^`RW|1~za5|0QsFQQ1loA2~>>2WIbz zxdkqKvl4bNLm_a+V1^A6O*p2Sb1q18kwUX~_SD0hi^*(D19OQ@I4BxC;1BRf8{X+( zp8r>;yGQi0^ksmNKZxH0(S4jJ1Axzu26f=FyUY{p~>%l(hFVEO+wo|JqbT3RiADhMSMx~?j8 zeav16m5p=w$hJ;gnK56OHYcL1pt6CMTZU*iZ!H0 zabW=M;5cHCDuQO_L{iPZ_{T5(@K>*X?<+swKMH?V z-+%Gut-tfuGao+xZohT^EA8f^S7tXi@9+M!YEYz7I^;rM`q8sL|Mm-i^xFU9rr!Er zz46VT?cWWZ>!pDX6-Ajda;;8U0H6dWmhn$>kF&8m#J%oeNfjja|W|xdvidkCgN+}Ml2|fX0W^(Wf+#y=Z=mE7RGAV4py(8u z0w+aQRYMmDDXAnVTti4qa1jDUSt*N41%#+@S(FAEsgr*Fnd2;+pey4xQchYLjI%7R zwPmyO@YdK^~ z~of}~^RKrwBYxEV3I%#?D;(BZhR zwwuzWECj*}nBYD#TJ(4e1g}K|6s}j+0!ax458UV4(lB+d+ZzNZ!I6^dIJua{&|%yO zMLYlO`6o}R%28Tgw8yYEZMO9{r^~k4N*Ju=oBUVn7ix+0qB?Tx9hyQ7(mEHNE%6Ve;_BgJ*Yd zU-|K9hJl!49+k~AxBsjAr}baH@&`}-tMC5y>345md#jpRMai{59w8Hqp_~9>LC z0WFarxo~Z&Wu7N8qhNsMni98Knx{-=M7(nDBFsHq$%-`;*{awxo*N)aY9`< z=Q&4YQP&aY34`0T%jZagUpzhAJl;Pmk2hLL$V@P}BvFRl59(&?!|C0!2^~~}i>530 zDHBVQhLV&b!7(M*xTK;1YD|fgl5s3eX_-P|i+#Bk2Qfg9E|m-)QxNvbA#kCtbDZn) zR7(?9WwbA_oglFs=qKEMOidaZeV ze)Hkgqx#e**P>~wIL+JV`{&oQ8h~5~0vv!2hq#No_y8e3*S>Lj^~1dbCONaD+QVfK zF-EqJ)hhxCm~+2pI1;A0+22b?hCz` z!q}HTPzPXb6>tg9*42bVAo`d!y>5#ED!VxOKzF z`q`J>Xnym<7vFpCPutzI8>iO}UpRewXQz(}#0n}|Bs=E@jCvti0n z1Bog3TD!TGNO|HKg!O=UIaCa8lJ7W8j$V4W`-`3X@%yGk6@Fz?)sgR`b>7g}c-FF}B4dfL5Tz%Z(|9sAjkYE7onsP6LeVBJk8p;phE!G|GyS%%g0Y*R_=_Cr3)S-1XM_%wfWns(f3Jd zOCgxSujfa+uKfh@uYJvWq5AW9Qo(eF%UtIaY#`f8>^Q)(~&Tecz zyz;ZKD2}Yk&M#fO^|NPw_Uubx54h0AuB zAUai~GNIo(yE@xAFAq0cPFMqJz^Q1f^PPwLzbs>U99l^RiOMT~QY2F294KlDbzK@! za#2fOJ(_`)q~64sP%eF{G6fGWqN{;BD+Tp5FqC-!11_#^ zZ+)lYIxT@*DbJsp?;Tz{y49C$#T-y!0;dhn_$RoJCC2gA@U7#U2m5!6zC4OvGtqp1 zD3&*dX}6y%FtGcP3@#ypr4_kgx}gP9Af5dZ*y07*naRNGu|a((8^E)A2e`w73N-JiL%dwpCtazhzq z|5Wqz!S0=%yO@N=pXRA+@+6$5nv%@48phnpnN2PDCQni!%DaG^yN=aFl6Av40ZabO zp`K5!u@-4*m(@W;wORp{i$nfmaLxeJ=z=h90P^y&S@i%$W>Hn;i+?i+GDuO5KC#Ln zKq;;mXtriQ4^ULNu(f`yr!%1ZI9Jdu%r22VtJJf^=0{ir>qMhY?GvuWz%agOG&&3* zB&3hPeFzHrd@tuohSHg8X2l>94c*A3Qp13=r?1~(sJNKMZV8nEKuauL4!NYnnh}<) z?bt`-dj7(nKJ!<|JmL__(ApK>gQki(!m#hvH$kwhl~BQ>nAs6`{R@Ap=kYF z0|0j2tvfewf9=LwH~-%+{^?i0`to-kzVV~+A*o9`;@+4Bjyjblhj1LXR8q|YF;e!N zxXU9ecn+|dfZ;L|nVQp*lw)>O@t_4%iA@o=n#t+z{k^xh-Y<{bqflcL*YGlSFy``d zYmVTs66_Lu3yq%JB~)#TnYm2mLXtFL79MbC*+m2@SS9L&Bbq$XWH^0xF};7~tZa*3 z2LS+s#8K~;8;`aQHt$Uir7zCY$R&e`F-3z0*O@32tGG_FQi!IK6DJKh5V4vLA&JE- zy<<%!>P}o|Y~oVdaM5X4XenTE>P9|Da?0$I2}cc10jL`&c}%FHE7Y#?KagLGf+@sI*up1(eS=3x6|au`mALc<{ESG#GPES~DO;4L@^ z3V396IKl@w#ILZAUHsj%(WXzk|DMh$X6{AddaFY!8>*{0DyyZZ9y&~D0CS%mFU`YI zV^yw`7HQY~4j|u)@qR zlrL(V^(X!Uv^lI_h<1;;CUwID0u^u^#N0U$SNFSEh`=1;_W8Y+(KDygw-8u58N z$;pF1ZgKr+b z{*#})`G+_D-4}lA`aihy{5#W!=3SGg+^>{r(0*4MW$vA(iX&%AT5?j>l9Yf1$AfzA zRcLTaD*;lq~3LT(oZxt)068*8)wy0238nYO(+$8eY){r=ibJ{ z`j{v*8YqGDNIKG?bV~$Exm+b39c3|REFEA`g%dc5!IE+(k&qE{ifj-?G?q@;0yLN7 zvpf>~K2>>&%Cd8ET*hNdM2JSQvNVCuwfTYmu&G(zF(`yG$w-tm?U>gj@Ob_sg z5A+02=5 z%2~4!wbju~J)!756-iov>l_%A(W-MgOl1ylYQ&mq6H1P40J|nlw07r|Tr*4&dmY+7 z{8avs&snLIQjwhS^$6OLJO;Rcg5l1AA&=&+f4ieQyiT-1`7 z&%?q%>QcYC9IImS>+mIhawO>`7#C9t0E&XoKhhkt^?Zksi$B*A06>@}TG-khhcQP1 zkKsm$2p4sb!674q!zMTQ_|BsN$+W}DE`Xu%h?i@f7d^SPh(Vle{f*+lRV9K**5y$_=7jL-g)I;f8oDLVzigL>PWtg|`-9EH@xkPQvF`vCum%G$60@-hDFo2qq6R}M zp~Y#tFI_4r87K{bV&Z`*WsM~|(==jD;ydG9a&plLr!slvjgUwHSwbjT1>*z-QWfSo z7@%Mc3R`=14Rs2$>!(j2-)u(9+BmTACOihr^)4UbHX@#DpO1g%;WHmhk3@~#Y^ZV= z>UL-Ld_Nhc>Ww`F6$lw~oZuaNh^W{5XXd}#KL0@>K>vo#j$K!keOAeSJc%|b8*#%eCN%r&8xVaRo!9~5(4^3}RJ;~jx% zs>^JZWi8Di@iI@qq+mCYQfFip&8^5IY2105^$Gp;;JMB7OD- zDo;v2!04bW1L=zmWd}lx3A*PJ2e-E##lwsNo*Tf5N8 zCs#QHqzjVus(wh|^&}^+lTL;QplbM=1=lNW&1zMX)=XT+0LBPs>($Veh}85`_HtnI zxP5r>BYG@LNcg;|_Qc}^O5k!{zObxgFFBwDGP{)7t%ml?exo=`BV)=coB&lxaZCis z>K7~y32vDKMF_+6r9Z#^&ew1K_~q~4Iw*f${QT)Rx4-nvm)^blgN^<9^|PyIH)l6S z^S!sX-e)y|L!>aBeeFNJ^v>OD|LK+g{^q~E@pn$X^3yBtO3LCoEoE+!D;~hZ7Aq1l zMXR~j5!6LWc}$(wiI>ya^v=zxGN5UiKECnitFM`_to% z56XFcoa*v0ZJIE0Y3!D{^vk$`C9$!w!KGA7lSi6}xyu1e;30+#UdB;E(iAd>MLTvK zl$a$0GC7V@$01gr;58%)rjo!EU6;ocHK>GBig{!u=QMI1G*@8m38`xK7FTA|qi4@| z+KO0EVpExuo~O6v5RVl4RQvMj@6N9tY#!7P<5XrtWxBYYuASfP_H#%Tz$oBANLb(z zKEz!NdcD0eys>=#?F#NJN5`Ve{jL;HD2JljWWn~ltQF4D0M+1nf(G?a0wvdqrbLc< z3zS$5S|K9%xq1^GNX>y=PONFDC`C6*HKaeTC%oHCDjLY=+I1kA$88hW^O>=cmDCY~ zU7w8+r~WJ#G&j+LAhQe~tMiVLit}Ma3})@h4mkOBc&9w6lmndGddcgeiIu?e5vAJY z9Y3UAryKx^&MtSG2LQ^pbRCU#tvtJE&E-$?rvZQn4Ln|N=B)0+#%Lky%ID%c@ugqs ze;x)yR$g!NWDsO692nLzYg(_A>L;qr2&=i)#jBsgqd4ZJ$p_0|Ha0cMYAT%uO2dYEOQ|3bGgMWiQ>jm1 zJ-l)I8(04Ht3SSZTK=g1W&KCjf9Jz5zQ6gaowp8OSzKLC@4az$bL&@=hvkeloaVx? zd3WRB=AGL&|M0c{{_4NH`j21z(mVTiNh#{cATtf5erb|N6iq2x;pW3M`8Zxo9_=1Z zzklt_KaeGRp5i*bf*sTda37h|I0ym=qG&Byiefxe0xm`>eQ2t?(z-c%-{guD1&NYK ztjSeoO>x>+i)y}eRL`qo~YSUiZIHPrLT&2oV5BGmwd1i-1{F)fWR-?$j1OYIq{rBwx_5Nu!xMi{MR z2af?d1_OuU)2?9soo4Iy*=jPj(y1xr((F1x_~Q-M2*z23?J^DW<$UO|6OVn$EQf%! zYMU__0R2^ zhz6)KMbZ?cu^@}Q;TFVTVnmhk;pFi8hu_)zi{JY3^$*H-`GaR(+5PtEvk$NRa8Hh3 zJ$YtvWibu?{?GQ_S@W_IrF#DQU){X>-m^cs_J801*Sr7l;I&83{(zJ5K zoTgDbIe7DI^sD_}O&{Qh12%adZ(GjoX@AT8wt5AmTsn>OpcrLREFwW+3|xSyu3r#>T3s3o6*pK;^?fM%EL z90;=LeTHY@T*?_Ijv5TZW)uKN*DkfgpItmT;LUR7GO#j1Yrz0KKgRyAKlA|GU$d3dx{&Mf|8&Cbc3#UEkdQ_Rb4O*M6||{&M@|ndR1p-#+=m-Y+&DR;R`W?s7RfePi*$``^9(XD|N0 zcK@H(fB%JV{MEHPqth%vlI8yS&e7K0onP(!*qwxgEo|Ud`ZEcRFf)3#i$z~8 zHty`+DbMO-QQr_!>7p^OP`r|bAm^O=O;(D;xzxnT80?}lKy2U`OVdF#4K>dbj0Y4; zEoDj4ZNXgU1hUma#)*W1(!nKO5}N=%Y3X{`4P)1FG+1y^#Y8>#xdfW+_NDpu;dApz zGtt28QDTCOP9O0Dyf4tLVK4oogQpI*kLy$4P);tD-K5)JZq1%mNwqo1MFXwJ43BUJ z@1fSK{TJrHdA@TvK2*o;Pz{1MO%ew!L0mR&GFs+P9i?rnz^pKkMT1GM+#G;$0{MBa zvJhKm0`?7gOImP(QqR$d2U4q{x%Q{I;=vdx*Ty!_urgOeIP0@3>d{2IZ8%gXp$Y)v z)Ghs7Yi@z;{VWegY@~T2bK_ib&zuMDj49_Kp-QSiI5!5nWH9uBVDry@lJg`RYb`1G z@lmZHF4ohX3zER<-~IT}C2SL*xRMAk7q*M$>l7p&pR5rhO|j&~TB`^4^=aMgzyHR|Kl;*-ZhTn&BK+dnSDt?5g>SySd#}EK^2+(uX3~7CnD4%~ zaes0^ow{O~)3g~sx_bLNTR-{2zqs)~{pRnSe&=0@2YbKVeZT%u8L@#aT)~&Hi_NuO zir0dG6=G8oD};Jp^fGV`T08byq;Vfki$!rC>ShGjut3T=!GxE?)HQLM(bdbVcVAdy zR(1u}7SEKzP;?uQ#t$Z^)4SzdI+s+mTGGAWMYA#FR8- zZy3t+=TC1O-CB&76Tor67y`o_AL1T9M1!65#`)JzpT1l7<6}c{kORbN1WKcpsLF+UNbX+ZB zmAdXq^~%Y1wNVucP5gfD9m<)AmIp?jl(+ zC>QB+h8OLQ)n$BJ)Zf zYmy2Rmtt^g;FOEdCS7T*E9a54LD5jmwd9z?P_u2c^x_M0#K#aDiO<0Sk{ z-rM@&m%efO#e=Q)cYigzetvbid+*J|7q;(S{Yi0{18ZM%E}QG|%IRx2zW>~x?*EIg z1w^i~gYRGuo0uT1Z+BKoN4KhKR`vw*SjI$sU&)TZqZ-Pya4wP zX(RVMBn7cm!<1A*H$8!9CoC>DA%t@}J$ib~rr{_AND} zL!JD|Z^UxB8>guvW_Xlf7?wD}hq#N|nBZpr<>rNhNng&&gA5zeI2@%3x}qJn${9_4 zr_QlE8)_Fda8ibl=Bew+z-hv;g3hx#XvvW^RlMY0C#jZ(LA?R2&cwvnHM;4})v;x! zs3mt+Ai8YeAs5^O)LEdOoa8UKH;2)5++As|OzY&-goZTnr))#*ItwrYB^u0;P@*0l z$j%smno*Lb-)4*#E|Eex2CoI50F} zxo;0gXC(fdH$oZ$m$_hb9Z4=Nam=NOEKQAbkfeq5Lts-jaUFGW#LS6=HA^1JB9AB~ z0fvch3Qdv|Nob${*)wnb=FOkJ`NuEa9lcw;d-Y#k{reBUcyi8~VNmLG`y&bh~~nYp>YHTK*ytE#JdsotC2Y?3`3l08Eb9AY3* zfB+5jMSq;WiV`FZB#j_Iz;Hwkmu^mXbyejWd&G?d$nGw(JnQwONoZnVWX$f%QR2pr_$V>p+$vTa+#4JeJGJ8_dTKd$G5_o`=XiQwi z%E&6I5CNvH>ai?=3oEHbo*;k;!NJLQ88$;&aVa5n!za~2C(pI0geHoFGq5zZ79yUvyOTm%d)ysww80@QWF!LX%j|b&fHrB zIF)D%N}Nh78xpI-m=8JeNaidXAmq{_xNz?k&%|020O)7xu~ze}T|N3}Ef_*-#cIGYwF9Dgq*R|7%hqC%>DI(Ze)%6hy5Ox& zIk4+BSlBO)9|B zNxlh%zQ$oH`KHB~17_)(Vj94ElbQ;{jSuv`S=yVioQ{k7o+TI2gOG6@*t=6HvDV)) z*4}CnFaXT?iOTk zx&TaqI%M`(G^ElPi@FNl`}w;+`SHhp{(Jx82VZn+{PTPN`sBxVe)GwPU#=eY@4otA z>Yjf8E{@H4 z*u<;miH7>Ao&;qM6|LfIt!&DQ=TZ&#hr@Muet2PMF?co+NzM8NdW_EVbfi!(Mj2MD>n;MmF5K~Bt}rSkVJxn zDX@UKQWr{OrD4b%CSC3=rr3hB^cG3kELt_T!|AK??VR z72fTCZT!bCADl1G+vg=B5ym(l=jHb9d^FxMhU~lo2*4E{<0;PY1@6utkN@fL-qWK^ z%%R7qtTl;ks>$2Xwgbm7vU$TB?P!AMLmrGN2i1xbNUp5rkyNr*VJtyL11&N;oV_9= zbE$e0ufSonXlDmCv~6{nMhTvM%I$44VB_!a1la}Eq9++quW z&?CZ-vAAhm*A2rg#cw)JV7FaJ7oor*=uv|p`@EdpKFvA2;Y)hqDQS_b@1_6yJ3syNzq7q{{G?8^%*}ArJST<}4(5`Ga~N!y0R;89 zyZ6owB?BAGI4DoH1hkO^=BYGDfeRyMgn^sF1TvU6_nzJPKm7Wi{p(-#A#5@`b5M1(-69MdkiPiV+)G#uQob-Svu(kw^oD50a5<`_Uvl^?Ak`asvLFPqm zA%&(L?4X%~5eJREc42~8BqcVMsYFOw>=son4l32?VB5Sq$IA~d?ypb#V-rS=28U1^ z`6*uVXLe=LemMS7|H;|uv!iv~m^mC{XWW0(zuTYa3UC�aUw$8+?k#*w~@{VE*mR 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%0AMq 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 0 else []): + combined = tf.nn.conv1d(n, wqkv_split[h], 1, 'SAME') + q, k, v = tf.split(combined, 3, axis=2) + if cache is not None: + k = tf.concat([cache['k'][:, h], k], axis=1) + v = tf.concat([cache['v'][:, h], v], axis=1) + cache_k.append(k) + cache_v.append(v) + o = common_attention.scaled_dot_product_attention_simple( + q, k, v, attention_bias) + y += tf.nn.conv1d(o, wo_split[h], 1, 'SAME') + if cache is not None: + cache['k'] = tf.stack(cache_k, axis=1) + cache['v'] = tf.stack(cache_v, axis=1) + return y + + key = ( + 'multihead_self_attention_memory_efficient %s %s' % (num_heads, epsilon)) + if not forget: + forward_fn = forward_internal + elif key in _function_cache: + forward_fn = _function_cache[key] + else: + + @function.Defun(compiled=True) + def grad_fn(x, wqkv, wo, attention_bias, norm_scale, norm_bias, dy): + """Custom gradient function.""" + with tf.control_dependencies([dy]): + n = common_layers.layer_norm_compute(x, epsilon, norm_scale, norm_bias) + wqkv_split = tf.unstack(wqkv, num=num_heads) + wo_split = tf.unstack(wo, num=num_heads) + deps = [] + dwqkvs = [] + dwos = [] + dn = 0 + for h in range(num_heads): + with tf.control_dependencies(deps): + combined = tf.nn.conv1d(n, wqkv_split[h], 1, 'SAME') + q, k, v = tf.split(combined, 3, axis=2) + o = common_attention.scaled_dot_product_attention_simple( + q, k, v, attention_bias) + partial_y = tf.nn.conv1d(o, wo_split[h], 1, 'SAME') + pdn, dwqkvh, dwoh = tf.gradients( + ys=[partial_y], + xs=[n, wqkv_split[h], wo_split[h]], + grad_ys=[dy]) + dn += pdn + dwqkvs.append(dwqkvh) + dwos.append(dwoh) + deps = [dn, dwqkvh, dwoh] + dwqkv = tf.stack(dwqkvs) + dwo = tf.stack(dwos) + with tf.control_dependencies(deps): + dx, dnorm_scale, dnorm_bias = tf.gradients( + ys=[n], xs=[x, norm_scale, norm_bias], grad_ys=[dn]) + return (dx, dwqkv, dwo, tf.zeros_like(attention_bias), dnorm_scale, + dnorm_bias) + + @function.Defun( + grad_func=grad_fn, compiled=True, separate_compiled_gradients=True) + def forward_fn(x, wqkv, wo, attention_bias, norm_scale, norm_bias): + return forward_internal(x, wqkv, wo, attention_bias, norm_scale, + norm_bias) + + _function_cache[key] = forward_fn + + if bias is not None: + bias = tf.squeeze(bias, 1) + with tf.variable_scope(name, default_name='multihead_attention', values=[x]): + if test_vars is not None: + wqkv, wo, norm_scale, norm_bias = list(test_vars) + else: + wqkv = tf.get_variable( + 'wqkv', [num_heads, 1, io_size, 3 * head_size], + initializer=tf.random_normal_initializer(stddev=io_size**-0.5)) + wo = tf.get_variable( + 'wo', [num_heads, 1, head_size, io_size], + initializer=tf.random_normal_initializer( + stddev=(head_size * num_heads)**-0.5)) + norm_scale, norm_bias = common_layers.layer_norm_vars(io_size) + y = forward_fn(x, wqkv, wo, bias, norm_scale, norm_bias) + y.set_shape(x.get_shape()) # pytype: disable=attribute-error + return y + + +class TransformerEncoder(snt.AbstractModule): + """Transformer encoder. + + Sonnet Transformer encoder module as described in Vaswani et al. 2017. Uses + the Tensor2Tensor multihead_attention function for full self attention + (no masking). Layer norm is applied inside the residual path as in sparse + transformers (Child 2019). + + This module expects inputs to be already embedded, and does not add position + embeddings. + """ + + def __init__(self, + hidden_size=256, + fc_size=1024, + num_heads=4, + layer_norm=True, + num_layers=8, + dropout_rate=0.2, + re_zero=True, + memory_efficient=False, + name='transformer_encoder'): + """Initializes TransformerEncoder. + + Args: + hidden_size: Size of embedding vectors. + fc_size: Size of fully connected layer. + num_heads: Number of attention heads. + layer_norm: If True, apply layer normalization + num_layers: Number of Transformer blocks, where each block contains a + multi-head attention layer and a MLP. + dropout_rate: Dropout rate applied immediately after the ReLU in each + fully-connected layer. + re_zero: If True, alpha scale residuals with zero init. + memory_efficient: If True, recompute gradients for memory savings. + name: Name of variable scope + """ + super(TransformerEncoder, self).__init__(name=name) + self.hidden_size = hidden_size + self.num_heads = num_heads + self.layer_norm = layer_norm + self.fc_size = fc_size + self.num_layers = num_layers + self.dropout_rate = dropout_rate + self.re_zero = re_zero + self.memory_efficient = memory_efficient + + def _build(self, inputs, is_training=False): + """Passes inputs through Transformer encoder network. + + Args: + inputs: Tensor of shape [batch_size, sequence_length, embed_size]. Zero + embeddings are masked in self-attention. + is_training: If True, dropout is applied. + + Returns: + output: Tensor of shape [batch_size, sequence_length, embed_size]. + """ + if is_training: + dropout_rate = self.dropout_rate + else: + dropout_rate = 0. + + # Identify elements with all zeros as padding, and create bias to mask + # out padding elements in self attention. + encoder_padding = common_attention.embedding_to_padding(inputs) + encoder_self_attention_bias = ( + common_attention.attention_bias_ignore_padding(encoder_padding)) + + x = inputs + for layer_num in range(self.num_layers): + with tf.variable_scope('layer_{}'.format(layer_num)): + + # Multihead self-attention from Tensor2Tensor. + res = x + if self.memory_efficient: + res = multihead_self_attention_memory_efficient( + res, + bias=encoder_self_attention_bias, + num_heads=self.num_heads, + head_size=self.hidden_size // self.num_heads, + forget=True if is_training else False, + name='self_attention' + ) + else: + if self.layer_norm: + res = common_layers.layer_norm(res, name='self_attention') + res = common_attention.multihead_attention( + res, + memory_antecedent=None, + bias=encoder_self_attention_bias, + total_key_depth=self.hidden_size, + total_value_depth=self.hidden_size, + output_depth=self.hidden_size, + num_heads=self.num_heads, + dropout_rate=0., + make_image_summary=False, + name='self_attention') + if self.re_zero: + res *= tf.get_variable('self_attention/alpha', initializer=0.) + if dropout_rate: + res = tf.nn.dropout(res, rate=dropout_rate) + x += res + + # MLP + res = x + if self.layer_norm: + res = common_layers.layer_norm(res, name='fc') + res = tf.layers.dense( + res, self.fc_size, activation=tf.nn.relu, name='fc_1') + res = tf.layers.dense(res, self.hidden_size, name='fc_2') + if self.re_zero: + res *= tf.get_variable('fc/alpha', initializer=0.) + if dropout_rate: + res = tf.nn.dropout(res, rate=dropout_rate) + x += res + + if self.layer_norm: + output = common_layers.layer_norm(x, name='output') + else: + output = x + return output + + +class TransformerDecoder(snt.AbstractModule): + """Transformer decoder. + + Sonnet Transformer decoder module as described in Vaswani et al. 2017. Uses + the Tensor2Tensor multihead_attention function for masked self attention, and + non-masked cross attention attention. Layer norm is applied inside the + residual path as in sparse transformers (Child 2019). + + This module expects inputs to be already embedded, and does not + add position embeddings. + """ + + def __init__(self, + hidden_size=256, + fc_size=1024, + num_heads=4, + layer_norm=True, + num_layers=8, + dropout_rate=0.2, + re_zero=True, + memory_efficient=False, + name='transformer_decoder'): + """Initializes TransformerDecoder. + + Args: + hidden_size: Size of embedding vectors. + fc_size: Size of fully connected layer. + num_heads: Number of attention heads. + layer_norm: If True, apply layer normalization. If mem_efficient_attention + is True, then layer norm is always applied. + num_layers: Number of Transformer blocks, where each block contains a + multi-head attention layer and a MLP. + dropout_rate: Dropout rate applied immediately after the ReLU in each + fully-connected layer. + re_zero: If True, alpha scale residuals with zero init. + memory_efficient: If True, recompute gradients for memory savings. + name: Name of variable scope + """ + super(TransformerDecoder, self).__init__(name=name) + self.hidden_size = hidden_size + self.num_heads = num_heads + self.layer_norm = layer_norm + self.fc_size = fc_size + self.num_layers = num_layers + self.dropout_rate = dropout_rate + self.re_zero = re_zero + self.memory_efficient = memory_efficient + + def _build(self, + inputs, + sequential_context_embeddings=None, + is_training=False, + cache=None): + """Passes inputs through Transformer decoder network. + + Args: + inputs: Tensor of shape [batch_size, sequence_length, embed_size]. Zero + embeddings are masked in self-attention. + sequential_context_embeddings: Optional tensor with global context + (e.g image embeddings) of shape + [batch_size, context_seq_length, context_embed_size]. + is_training: If True, dropout is applied. + cache: Optional dict containing tensors which are the results of previous + attentions, used for fast decoding. Expects the dict to contain two + keys ('k' and 'v'), for the initial call the values for these keys + should be empty Tensors of the appropriate shape. + 'k' [batch_size, 0, key_channels] 'v' [batch_size, 0, value_channels] + + Returns: + output: Tensor of shape [batch_size, sequence_length, embed_size]. + """ + if is_training: + dropout_rate = self.dropout_rate + else: + dropout_rate = 0. + + # create bias to mask future elements for causal self-attention. + seq_length = tf.shape(inputs)[1] + decoder_self_attention_bias = common_attention.attention_bias_lower_triangle( + seq_length) + + # If using sequential_context, identify elements with all zeros as padding, + # and create bias to mask out padding elements in self attention. + if sequential_context_embeddings is not None: + encoder_padding = common_attention.embedding_to_padding( + sequential_context_embeddings) + encoder_decoder_attention_bias = ( + common_attention.attention_bias_ignore_padding(encoder_padding)) + + x = inputs + for layer_num in range(self.num_layers): + with tf.variable_scope('layer_{}'.format(layer_num)): + + # If using cached decoding, access cache for current layer, and create + # bias that enables un-masked attention into the cache + if cache is not None: + layer_cache = cache[layer_num] + layer_decoder_bias = tf.zeros([1, 1, 1, 1]) + # Otherwise use standard masked bias + else: + layer_cache = None + layer_decoder_bias = decoder_self_attention_bias + + # Multihead self-attention from Tensor2Tensor. + res = x + if self.memory_efficient: + res = multihead_self_attention_memory_efficient( + res, + bias=layer_decoder_bias, + cache=layer_cache, + num_heads=self.num_heads, + head_size=self.hidden_size // self.num_heads, + forget=True if is_training else False, + name='self_attention' + ) + else: + if self.layer_norm: + res = common_layers.layer_norm(res, name='self_attention') + res = common_attention.multihead_attention( + res, + memory_antecedent=None, + bias=layer_decoder_bias, + total_key_depth=self.hidden_size, + total_value_depth=self.hidden_size, + output_depth=self.hidden_size, + num_heads=self.num_heads, + cache=layer_cache, + dropout_rate=0., + make_image_summary=False, + name='self_attention') + if self.re_zero: + res *= tf.get_variable('self_attention/alpha', initializer=0.) + if dropout_rate: + res = tf.nn.dropout(res, rate=dropout_rate) + x += res + + # Optional cross attention into sequential context + if sequential_context_embeddings is not None: + res = x + if self.layer_norm: + res = common_layers.layer_norm(res, name='cross_attention') + res = common_attention.multihead_attention( + res, + memory_antecedent=sequential_context_embeddings, + bias=encoder_decoder_attention_bias, + total_key_depth=self.hidden_size, + total_value_depth=self.hidden_size, + output_depth=self.hidden_size, + num_heads=self.num_heads, + dropout_rate=0., + make_image_summary=False, + name='cross_attention') + if self.re_zero: + res *= tf.get_variable('cross_attention/alpha', initializer=0.) + if dropout_rate: + res = tf.nn.dropout(res, rate=dropout_rate) + x += res + + # FC layers + res = x + if self.layer_norm: + res = common_layers.layer_norm(res, name='fc') + res = tf.layers.dense( + res, self.fc_size, activation=tf.nn.relu, name='fc_1') + res = tf.layers.dense(res, self.hidden_size, name='fc_2') + if self.re_zero: + res *= tf.get_variable('fc/alpha', initializer=0.) + if dropout_rate: + res = tf.nn.dropout(res, rate=dropout_rate) + x += res + + if self.layer_norm: + output = common_layers.layer_norm(x, name='output') + else: + output = x + return output + + def create_init_cache(self, batch_size): + """Creates empty cache dictionary for use in fast decoding.""" + + def compute_cache_shape_invariants(tensor): + """Helper function to get dynamic shapes for cache tensors.""" + shape_list = tensor.shape.as_list() + if len(shape_list) == 4: + return tf.TensorShape( + [shape_list[0], shape_list[1], None, shape_list[3]]) + elif len(shape_list) == 3: + return tf.TensorShape([shape_list[0], None, shape_list[2]]) + + # Build cache + k = common_attention.split_heads( + tf.zeros([batch_size, 0, self.hidden_size]), self.num_heads) + v = common_attention.split_heads( + tf.zeros([batch_size, 0, self.hidden_size]), self.num_heads) + cache = [{'k': k, 'v': v} for _ in range(self.num_layers)] + shape_invariants = tf.nest.map_structure( + compute_cache_shape_invariants, cache) + return cache, shape_invariants + + +def conv_residual_block(inputs, + output_channels=None, + downsample=False, + kernel_size=3, + re_zero=True, + dropout_rate=0., + name='conv_residual_block'): + """Convolutional block with residual connections for 2D or 3D inputs. + + Args: + inputs: Input tensor of shape [batch_size, height, width, channels] or + [batch_size, height, width, depth, channels]. + output_channels: Number of output channels. + downsample: If True, downsample by 1/2 in this block. + kernel_size: Spatial size of convolutional kernels. + re_zero: If True, alpha scale residuals with zero init. + dropout_rate: Dropout rate applied after second ReLU in residual path. + name: Name for variable scope. + + Returns: + outputs: Output tensor of shape [batch_size, height, width, output_channels] + or [batch_size, height, width, depth, output_channels]. + """ + with tf.variable_scope(name): + input_shape = inputs.get_shape().as_list() + num_dims = len(input_shape) - 2 + + if num_dims == 2: + conv = tf.layers.conv2d + elif num_dims == 3: + conv = tf.layers.conv3d + + input_channels = input_shape[-1] + if output_channels is None: + output_channels = input_channels + if downsample: + shortcut = conv( + inputs, + filters=output_channels, + strides=2, + kernel_size=kernel_size, + padding='same', + name='conv_shortcut') + else: + shortcut = inputs + + res = inputs + res = tf.nn.relu(res) + res = conv( + res, filters=input_channels, kernel_size=kernel_size, padding='same', + name='conv_1') + + res = tf.nn.relu(res) + if dropout_rate: + res = tf.nn.dropout(res, rate=dropout_rate) + if downsample: + out_strides = 2 + else: + out_strides = 1 + res = conv( + res, + filters=output_channels, + kernel_size=kernel_size, + padding='same', + strides=out_strides, + name='conv_2') + if re_zero: + res *= tf.get_variable('alpha', initializer=0.) + return shortcut + res + + +class ResNet(snt.AbstractModule): + """ResNet architecture for 2D image or 3D voxel inputs.""" + + def __init__(self, + num_dims, + hidden_sizes=(64, 256), + num_blocks=(2, 2), + dropout_rate=0.1, + re_zero=True, + name='res_net'): + """Initializes ResNet. + + Args: + num_dims: Number of spatial dimensions. 2 for images or 3 for voxels. + hidden_sizes: Sizes of hidden layers in resnet blocks. + num_blocks: Number of resnet blocks at each size. + dropout_rate: Dropout rate applied immediately after the ReLU in each + fully-connected layer. + re_zero: If True, alpha scale residuals with zero init. + name: Name of variable scope + """ + super(ResNet, self).__init__(name=name) + self.num_dims = num_dims + self.hidden_sizes = hidden_sizes + self.num_blocks = num_blocks + self.dropout_rate = dropout_rate + self.re_zero = re_zero + + def _build(self, inputs, is_training=False): + """Passes inputs through resnet. + + Args: + inputs: Tensor of shape [batch_size, height, width, channels] or + [batch_size, height, width, depth, channels]. + is_training: If True, dropout is applied. + + Returns: + output: Tensor of shape [batch_size, height, width, depth, output_size]. + """ + if is_training: + dropout_rate = self.dropout_rate + else: + dropout_rate = 0. + + # Initial projection with large kernel as in original resnet architecture + if self.num_dims == 3: + conv = tf.layers.conv3d + elif self.num_dims == 2: + conv = tf.layers.conv2d + x = conv( + inputs, + filters=self.hidden_sizes[0], + kernel_size=7, + strides=2, + padding='same', + name='conv_input') + + if self.num_dims == 2: + x = tf.layers.max_pooling2d( + x, strides=2, pool_size=3, padding='same', name='pool_input') + + for d, (hidden_size, + blocks) in enumerate(zip(self.hidden_sizes, self.num_blocks)): + + with tf.variable_scope('resolution_{}'.format(d)): + + # Downsample at the start of each collection of blocks + x = conv_residual_block( + x, + downsample=False if d == 0 else True, + dropout_rate=dropout_rate, + output_channels=hidden_size, + re_zero=self.re_zero, + name='block_1_downsample') + for i in range(blocks - 1): + x = conv_residual_block( + x, + dropout_rate=dropout_rate, + output_channels=hidden_size, + re_zero=self.re_zero, + name='block_{}'.format(i + 2)) + return x + + +class VertexModel(snt.AbstractModule): + """Autoregressive generative model of quantized mesh vertices. + + Operates on flattened vertex sequences with a stopping token: + + [z_0, y_0, x_0, z_1, y_1, x_1, ..., z_n, y_n, z_n, STOP] + + Input vertex coordinates are embedded and tagged with learned coordinate and + position indicators. A transformer decoder outputs logits for a quantized + vertex distribution. + """ + + def __init__(self, + decoder_config, + quantization_bits, + class_conditional=False, + num_classes=55, + max_num_input_verts=2500, + use_discrete_embeddings=True, + name='vertex_model'): + """Initializes VertexModel. + + Args: + decoder_config: Dictionary with TransformerDecoder config + quantization_bits: Number of quantization used in mesh preprocessing. + class_conditional: If True, then condition on learned class embeddings. + num_classes: Number of classes to condition on. + max_num_input_verts: Maximum number of vertices. Used for learned position + embeddings. + use_discrete_embeddings: If True, use discrete rather than continuous + vertex embeddings. + name: Name of variable scope + """ + super(VertexModel, self).__init__(name=name) + self.embedding_dim = decoder_config['hidden_size'] + self.class_conditional = class_conditional + self.num_classes = num_classes + self.max_num_input_verts = max_num_input_verts + self.quantization_bits = quantization_bits + self.use_discrete_embeddings = use_discrete_embeddings + + with self._enter_variable_scope(): + self.decoder = TransformerDecoder(**decoder_config) + + @snt.reuse_variables + def _embed_class_label(self, labels): + """Embeds class label with learned embedding matrix.""" + init_dict = {'embeddings': tf.glorot_uniform_initializer} + return snt.Embed( + vocab_size=self.num_classes, + embed_dim=self.embedding_dim, + initializers=init_dict, + densify_gradients=True, + name='class_label')(labels) + + @snt.reuse_variables + def _prepare_context(self, context, is_training=False): + """Prepare class label context.""" + if self.class_conditional: + global_context_embedding = self._embed_class_label(context['class_label']) + else: + global_context_embedding = None + return global_context_embedding, None + + @snt.reuse_variables + def _embed_inputs(self, vertices, global_context_embedding=None): + """Embeds flat vertices and adds position and coordinate information.""" + # Dequantize inputs and get shapes + input_shape = tf.shape(vertices) + batch_size, seq_length = input_shape[0], input_shape[1] + + # Coord indicators (x, y, z) + coord_embeddings = snt.Embed( + vocab_size=3, + embed_dim=self.embedding_dim, + initializers={'embeddings': tf.glorot_uniform_initializer}, + densify_gradients=True, + name='coord_embeddings')(tf.mod(tf.range(seq_length), 3)) + + # Position embeddings + pos_embeddings = snt.Embed( + vocab_size=self.max_num_input_verts, + embed_dim=self.embedding_dim, + initializers={'embeddings': tf.glorot_uniform_initializer}, + densify_gradients=True, + name='coord_embeddings')(tf.floordiv(tf.range(seq_length), 3)) + + # Discrete vertex value embeddings + if self.use_discrete_embeddings: + vert_embeddings = snt.Embed( + vocab_size=2**self.quantization_bits + 1, + embed_dim=self.embedding_dim, + initializers={'embeddings': tf.glorot_uniform_initializer}, + densify_gradients=True, + name='value_embeddings')(vertices) + # Continuous vertex value embeddings + else: + vert_embeddings = tf.layers.dense( + dequantize_verts(vertices[Ellipsis, None], self.quantization_bits), + self.embedding_dim, + use_bias=True, + name='value_embeddings') + + # Step zero embeddings + if global_context_embedding is None: + zero_embed = tf.get_variable( + 'embed_zero', shape=[1, 1, self.embedding_dim]) + zero_embed_tiled = tf.tile(zero_embed, [batch_size, 1, 1]) + else: + zero_embed_tiled = global_context_embedding[:, None] + + # Aggregate embeddings + embeddings = vert_embeddings + (coord_embeddings + pos_embeddings)[None] + embeddings = tf.concat([zero_embed_tiled, embeddings], axis=1) + + return embeddings + + @snt.reuse_variables + def _project_to_logits(self, inputs): + """Projects transformer outputs to logits for predictive distribution.""" + return tf.layers.dense( + inputs, + 2**self.quantization_bits + 1, # + 1 for stopping token + use_bias=True, + kernel_initializer=tf.zeros_initializer(), + name='project_to_logits') + + @snt.reuse_variables + def _create_dist(self, + vertices, + global_context_embedding=None, + sequential_context_embeddings=None, + temperature=1., + top_k=0, + top_p=1., + is_training=False, + cache=None): + """Outputs categorical dist for quantized vertex coordinates.""" + + # Embed inputs + decoder_inputs = self._embed_inputs(vertices, global_context_embedding) + if cache is not None: + decoder_inputs = decoder_inputs[:, -1:] + + # pass through decoder + outputs = self.decoder( + decoder_inputs, cache=cache, + sequential_context_embeddings=sequential_context_embeddings, + is_training=is_training) + + # Get logits and optionally process for sampling + logits = self._project_to_logits(outputs) + logits /= temperature + logits = top_k_logits(logits, top_k) + logits = top_p_logits(logits, top_p) + cat_dist = tfd.Categorical(logits=logits) + return cat_dist + + def _build(self, batch, is_training=False): + """Pass batch through vertex model and get log probabilities under model. + + Args: + batch: Dictionary containing: + 'vertices_flat': int32 vertex tensors of shape [batch_size, seq_length]. + is_training: If True, use dropout. + + Returns: + pred_dist: tfd.Categorical predictive distribution with batch shape + [batch_size, seq_length]. + """ + global_context, seq_context = self._prepare_context( + batch, is_training=is_training) + pred_dist = self._create_dist( + batch['vertices_flat'][:, :-1], # Last element not used for preds + global_context_embedding=global_context, + sequential_context_embeddings=seq_context, + is_training=is_training) + return pred_dist + + def sample(self, + num_samples, + context=None, + max_sample_length=None, + temperature=1., + top_k=0, + top_p=1., + recenter_verts=True, + only_return_complete=True): + """Autoregressive sampling with caching. + + Args: + num_samples: Number of samples to produce. + context: Dictionary of context, such as class labels. See _prepare_context + for details. + max_sample_length: Maximum length of sampled vertex sequences. Sequences + that do not complete are truncated. + temperature: Scalar softmax temperature > 0. + top_k: Number of tokens to keep for top-k sampling. + top_p: Proportion of probability mass to keep for top-p sampling. + recenter_verts: If True, center vertex samples around origin. This should + be used if model is trained using shift augmentations. + only_return_complete: If True, only return completed samples. Otherwise + return all samples along with completed indicator. + + Returns: + outputs: Output dictionary with fields: + 'completed': Boolean tensor of shape [num_samples]. If True then + corresponding sample completed within max_sample_length. + 'vertices': Tensor of samples with shape [num_samples, num_verts, 3]. + 'num_vertices': Tensor indicating number of vertices for each example + in padded vertex samples. + 'vertices_mask': Tensor of shape [num_samples, num_verts] that masks + corresponding invalid elements in 'vertices'. + """ + # Obtain context for decoder + global_context, seq_context = self._prepare_context( + context, is_training=False) + + # num_samples is the minimum value of num_samples and the batch size of + # context inputs (if present). + if global_context is not None: + num_samples = tf.minimum(num_samples, tf.shape(global_context)[0]) + global_context = global_context[:num_samples] + if seq_context is not None: + seq_context = seq_context[:num_samples] + elif seq_context is not None: + num_samples = tf.minimum(num_samples, tf.shape(seq_context)[0]) + seq_context = seq_context[:num_samples] + + def _loop_body(i, samples, cache): + """While-loop body for autoregression calculation.""" + cat_dist = self._create_dist( + samples, + global_context_embedding=global_context, + sequential_context_embeddings=seq_context, + cache=cache, + temperature=temperature, + top_k=top_k, + top_p=top_p) + next_sample = cat_dist.sample() + samples = tf.concat([samples, next_sample], axis=1) + return i + 1, samples, cache + + def _stopping_cond(i, samples, cache): + """Stopping condition for sampling while-loop.""" + del i, cache # Unused + return tf.reduce_any(tf.reduce_all(tf.not_equal(samples, 0), axis=-1)) + + # Initial values for loop variables + samples = tf.zeros([num_samples, 0], dtype=tf.int32) + max_sample_length = max_sample_length or self.max_num_input_verts + cache, cache_shape_invariants = self.decoder.create_init_cache(num_samples) + _, v, _ = tf.while_loop( + cond=_stopping_cond, + body=_loop_body, + loop_vars=(0, samples, cache), + shape_invariants=(tf.TensorShape([]), tf.TensorShape([None, None]), + cache_shape_invariants), + maximum_iterations=max_sample_length * 3 + 1, + back_prop=False, + parallel_iterations=1) + + # Check if samples completed. Samples are complete if the stopping token + # is produced. + completed = tf.reduce_any(tf.equal(v, 0), axis=-1) + + # Get the number of vertices in the sample. This requires finding the + # index of the stopping token. For complete samples use to argmax to get + # first nonzero index. + stop_index_completed = tf.argmax( + tf.cast(tf.equal(v, 0), tf.int32), axis=-1, output_type=tf.int32) + # For incomplete samples the stopping index is just the maximum index. + stop_index_incomplete = ( + max_sample_length * 3 * tf.ones_like(stop_index_completed)) + stop_index = tf.where( + completed, stop_index_completed, stop_index_incomplete) + num_vertices = tf.floordiv(stop_index, 3) + + # Convert to 3D vertices by reshaping and re-ordering x -> y -> z + v = v[:, :(tf.reduce_max(num_vertices) * 3)] - 1 + verts_dequantized = dequantize_verts(v, self.quantization_bits) + vertices = tf.reshape(verts_dequantized, [num_samples, -1, 3]) + vertices = tf.stack( + [vertices[Ellipsis, 2], vertices[Ellipsis, 1], vertices[Ellipsis, 0]], axis=-1) + + # Pad samples to max sample length. This is required in order to concatenate + # Samples across different replicator instances. Pad with stopping tokens + # for incomplete samples. + pad_size = max_sample_length - tf.shape(vertices)[1] + vertices = tf.pad(vertices, [[0, 0], [0, pad_size], [0, 0]]) + + # 3D Vertex mask + vertices_mask = tf.cast( + tf.range(max_sample_length)[None] < num_vertices[:, None], tf.float32) + + if recenter_verts: + vert_max = tf.reduce_max( + vertices - 1e10 * (1. - vertices_mask)[Ellipsis, None], axis=1, + keepdims=True) + vert_min = tf.reduce_min( + vertices + 1e10 * (1. - vertices_mask)[Ellipsis, None], axis=1, + keepdims=True) + vert_centers = 0.5 * (vert_max + vert_min) + vertices -= vert_centers + vertices *= vertices_mask[Ellipsis, None] + + if only_return_complete: + vertices = tf.boolean_mask(vertices, completed) + num_vertices = tf.boolean_mask(num_vertices, completed) + vertices_mask = tf.boolean_mask(vertices_mask, completed) + completed = tf.boolean_mask(completed, completed) + + # Outputs + outputs = { + 'completed': completed, + 'vertices': vertices, + 'num_vertices': num_vertices, + 'vertices_mask': vertices_mask, + } + return outputs + + +class ImageToVertexModel(VertexModel): + """Generative model of quantized mesh vertices with image conditioning. + + Operates on flattened vertex sequences with a stopping token: + + [z_0, y_0, x_0, z_1, y_1, x_1, ..., z_n, y_n, z_n, STOP] + + Input vertex coordinates are embedded and tagged with learned coordinate and + position indicators. A transformer decoder outputs logits for a quantized + vertex distribution. Image inputs are encoded and used to condition the + vertex decoder. + """ + + def __init__(self, + res_net_config, + decoder_config, + quantization_bits, + use_discrete_embeddings=True, + max_num_input_verts=2500, + name='image_to_vertex_model'): + """Initializes VoxelToVertexModel. + + Args: + res_net_config: Dictionary with ResNet config. + decoder_config: Dictionary with TransformerDecoder config. + quantization_bits: Number of quantization used in mesh preprocessing. + use_discrete_embeddings: If True, use discrete rather than continuous + vertex embeddings. + max_num_input_verts: Maximum number of vertices. Used for learned position + embeddings. + name: Name of variable scope + """ + super(ImageToVertexModel, self).__init__( + decoder_config=decoder_config, + quantization_bits=quantization_bits, + max_num_input_verts=max_num_input_verts, + use_discrete_embeddings=use_discrete_embeddings, + name=name) + + with self._enter_variable_scope(): + self.res_net = ResNet(num_dims=2, **res_net_config) + + @snt.reuse_variables + def _prepare_context(self, context, is_training=False): + + # Pass images through encoder + image_embeddings = self.res_net( + context['image'] - 0.5, is_training=is_training) + + # Add 2D coordinate grid embedding + processed_image_resolution = tf.shape(image_embeddings)[1] + x = tf.linspace(-1., 1., processed_image_resolution) + image_coords = tf.stack(tf.meshgrid(x, x), axis=-1) + image_coord_embeddings = tf.layers.dense( + image_coords, + self.embedding_dim, + use_bias=True, + name='image_coord_embeddings') + image_embeddings += image_coord_embeddings[None] + + # Reshape spatial grid to sequence + batch_size = tf.shape(image_embeddings)[0] + sequential_context_embedding = tf.reshape( + image_embeddings, [batch_size, -1, self.embedding_dim]) + + return None, sequential_context_embedding + + +class VoxelToVertexModel(VertexModel): + """Generative model of quantized mesh vertices with voxel conditioning. + + Operates on flattened vertex sequences with a stopping token: + + [z_0, y_0, x_0, z_1, y_1, x_1, ..., z_n, y_n, z_n, STOP] + + Input vertex coordinates are embedded and tagged with learned coordinate and + position indicators. A transformer decoder outputs logits for a quantized + vertex distribution. Image inputs are encoded and used to condition the + vertex decoder. + """ + + def __init__(self, + res_net_config, + decoder_config, + quantization_bits, + use_discrete_embeddings=True, + max_num_input_verts=2500, + name='voxel_to_vertex_model'): + """Initializes VoxelToVertexModel. + + Args: + res_net_config: Dictionary with ResNet config. + decoder_config: Dictionary with TransformerDecoder config. + quantization_bits: Integer number of bits used for vertex quantization. + use_discrete_embeddings: If True, use discrete rather than continuous + vertex embeddings. + max_num_input_verts: Maximum number of vertices. Used for learned position + embeddings. + name: Name of variable scope + """ + super(VoxelToVertexModel, self).__init__( + decoder_config=decoder_config, + quantization_bits=quantization_bits, + max_num_input_verts=max_num_input_verts, + use_discrete_embeddings=use_discrete_embeddings, + name=name) + + with self._enter_variable_scope(): + self.res_net = ResNet(num_dims=3, **res_net_config) + + @snt.reuse_variables + def _prepare_context(self, context, is_training=False): + + # Embed binary input voxels + voxel_embeddings = snt.Embed( + vocab_size=2, + embed_dim=self.pre_embed_dim, + initializers={'embeddings': tf.glorot_uniform_initializer}, + densify_gradients=True, + name='voxel_embeddings')(context['voxels']) + + # Pass embedded voxels through voxel encoder + voxel_embeddings = self.res_net( + voxel_embeddings, is_training=is_training) + + # Add 3D coordinate grid embedding + processed_voxel_resolution = tf.shape(voxel_embeddings)[1] + x = tf.linspace(-1., 1., processed_voxel_resolution) + voxel_coords = tf.stack(tf.meshgrid(x, x, x), axis=-1) + voxel_coord_embeddings = tf.layers.dense( + voxel_coords, + self.embedding_dim, + use_bias=True, + name='voxel_coord_embeddings') + voxel_embeddings += voxel_coord_embeddings[None] + + # Reshape spatial grid to sequence + batch_size = tf.shape(voxel_embeddings)[0] + sequential_context_embedding = tf.reshape( + voxel_embeddings, [batch_size, -1, self.embedding_dim]) + + return None, sequential_context_embedding + + +class FaceModel(snt.AbstractModule): + """Autoregressive generative model of n-gon meshes. + + Operates on sets of input vertices as well as flattened face sequences with + new face and stopping tokens: + + [f_0^0, f_0^1, f_0^2, NEW, f_1^0, f_1^1, ..., STOP] + + Input vertices are encoded using a Transformer encoder. + + Input face sequences are embedded and tagged with learned position indicators, + as well as their corresponding vertex embeddings. A transformer decoder + outputs a pointer which is compared to each vertex embedding to obtain a + distribution over vertex indices. + """ + + def __init__(self, + encoder_config, + decoder_config, + class_conditional=True, + num_classes=55, + decoder_cross_attention=True, + use_discrete_vertex_embeddings=True, + quantization_bits=8, + max_seq_length=5000, + name='face_model'): + """Initializes FaceModel. + + Args: + encoder_config: Dictionary with TransformerEncoder config. + decoder_config: Dictionary with TransformerDecoder config. + class_conditional: If True, then condition on learned class embeddings. + num_classes: Number of classes to condition on. + decoder_cross_attention: If True, the use cross attention from decoder + querys into encoder outputs. + use_discrete_vertex_embeddings: If True, use discrete vertex embeddings. + quantization_bits: Number of quantization bits for discrete vertex + embeddings. + max_seq_length: Maximum face sequence length. Used for learned position + embeddings. + name: Name of variable scope + """ + super(FaceModel, self).__init__(name=name) + self.embedding_dim = decoder_config['hidden_size'] + self.class_conditional = class_conditional + self.num_classes = num_classes + self.max_seq_length = max_seq_length + self.decoder_cross_attention = decoder_cross_attention + self.use_discrete_vertex_embeddings = use_discrete_vertex_embeddings + self.quantization_bits = quantization_bits + + with self._enter_variable_scope(): + self.decoder = TransformerDecoder(**decoder_config) + self.encoder = TransformerEncoder(**encoder_config) + + @snt.reuse_variables + def _embed_class_label(self, labels): + """Embeds class label with learned embedding matrix.""" + init_dict = {'embeddings': tf.glorot_uniform_initializer} + return snt.Embed( + vocab_size=self.num_classes, + embed_dim=self.embedding_dim, + initializers=init_dict, + densify_gradients=True, + name='class_label')(labels) + + @snt.reuse_variables + def _prepare_context(self, context, is_training=False): + """Prepare class label and vertex context.""" + if self.class_conditional: + global_context_embedding = self._embed_class_label(context['class_label']) + else: + global_context_embedding = None + vertex_embeddings = self._embed_vertices( + context['vertices'], context['vertices_mask'], + is_training=is_training) + if self.decoder_cross_attention: + sequential_context_embeddings = ( + vertex_embeddings * + tf.pad(context['vertices_mask'], [[0, 0], [2, 0]], + constant_values=1)[Ellipsis, None]) + else: + sequential_context_embeddings = None + return (vertex_embeddings, global_context_embedding, + sequential_context_embeddings) + + @snt.reuse_variables + def _embed_vertices(self, vertices, vertices_mask, is_training=False): + """Embeds vertices with transformer encoder.""" + # num_verts = tf.shape(vertices)[1] + if self.use_discrete_vertex_embeddings: + vertex_embeddings = 0. + verts_quantized = quantize_verts(vertices, self.quantization_bits) + for c in range(3): + vertex_embeddings += snt.Embed( + vocab_size=256, + embed_dim=self.embedding_dim, + initializers={'embeddings': tf.glorot_uniform_initializer}, + densify_gradients=True, + name='coord_{}'.format(c))(verts_quantized[Ellipsis, c]) + else: + vertex_embeddings = tf.layers.dense( + vertices, self.embedding_dim, use_bias=True, name='vertex_embeddings') + vertex_embeddings *= vertices_mask[Ellipsis, None] + + # Pad vertex embeddings with learned embeddings for stopping and new face + # tokens + stopping_embeddings = tf.get_variable( + 'stopping_embeddings', shape=[1, 2, self.embedding_dim]) + stopping_embeddings = tf.tile(stopping_embeddings, + [tf.shape(vertices)[0], 1, 1]) + vertex_embeddings = tf.concat( + [stopping_embeddings, vertex_embeddings], axis=1) + + # Pass through Transformer encoder + vertex_embeddings = self.encoder(vertex_embeddings, is_training=is_training) + return vertex_embeddings + + @snt.reuse_variables + def _embed_inputs(self, faces_long, vertex_embeddings, + global_context_embedding=None): + """Embeds face sequences and adds within and between face positions.""" + + # Face value embeddings are gathered vertex embeddings + face_embeddings = tf.gather(vertex_embeddings, faces_long, batch_dims=1) + + # Position embeddings + pos_embeddings = snt.Embed( + vocab_size=self.max_seq_length, + embed_dim=self.embedding_dim, + initializers={'embeddings': tf.glorot_uniform_initializer}, + densify_gradients=True, + name='coord_embeddings')(tf.range(tf.shape(faces_long)[1])) + + # Step zero embeddings + batch_size = tf.shape(face_embeddings)[0] + if global_context_embedding is None: + zero_embed = tf.get_variable( + 'embed_zero', shape=[1, 1, self.embedding_dim]) + zero_embed_tiled = tf.tile(zero_embed, [batch_size, 1, 1]) + else: + zero_embed_tiled = global_context_embedding[:, None] + + # Aggregate embeddings + embeddings = face_embeddings + pos_embeddings[None] + embeddings = tf.concat([zero_embed_tiled, embeddings], axis=1) + + return embeddings + + @snt.reuse_variables + def _project_to_pointers(self, inputs): + """Projects transformer outputs to pointer vectors.""" + return tf.layers.dense( + inputs, + self.embedding_dim, + use_bias=True, + kernel_initializer=tf.zeros_initializer(), + name='project_to_pointers' + ) + + @snt.reuse_variables + def _create_dist(self, + vertex_embeddings, + vertices_mask, + faces_long, + global_context_embedding=None, + sequential_context_embeddings=None, + temperature=1., + top_k=0, + top_p=1., + is_training=False, + cache=None): + """Outputs categorical dist for vertex indices.""" + + # Embed inputs + decoder_inputs = self._embed_inputs( + faces_long, vertex_embeddings, global_context_embedding) + + # Pass through Transformer decoder + if cache is not None: + decoder_inputs = decoder_inputs[:, -1:] + decoder_outputs = self.decoder( + decoder_inputs, + cache=cache, + sequential_context_embeddings=sequential_context_embeddings, + is_training=is_training) + + # Get pointers + pred_pointers = self._project_to_pointers(decoder_outputs) + + # Get logits and mask + logits = tf.matmul(pred_pointers, vertex_embeddings, transpose_b=True) + logits /= tf.sqrt(float(self.embedding_dim)) + f_verts_mask = tf.pad( + vertices_mask, [[0, 0], [2, 0]], constant_values=1.)[:, None] + logits *= f_verts_mask + logits -= (1. - f_verts_mask) * 1e9 + logits /= temperature + logits = top_k_logits(logits, top_k) + logits = top_p_logits(logits, top_p) + return tfd.Categorical(logits=logits) + + def _build(self, batch, is_training=False): + """Pass batch through face model and get log probabilities. + + Args: + batch: Dictionary containing: + 'vertices_dequantized': Tensor of shape [batch_size, num_vertices, 3]. + 'faces': int32 tensor of shape [batch_size, seq_length] with flattened + faces. + 'vertices_mask': float32 tensor with shape + [batch_size, num_vertices] that masks padded elements in 'vertices'. + is_training: If True, use dropout. + + Returns: + pred_dist: tfd.Categorical predictive distribution with batch shape + [batch_size, seq_length]. + """ + vertex_embeddings, global_context, seq_context = self._prepare_context( + batch, is_training=is_training) + pred_dist = self._create_dist( + vertex_embeddings, + batch['vertices_mask'], + batch['faces'][:, :-1], + global_context_embedding=global_context, + sequential_context_embeddings=seq_context, + is_training=is_training) + return pred_dist + + def sample(self, + context, + max_sample_length=None, + temperature=1., + top_k=0, + top_p=1., + only_return_complete=True): + """Sample from face model using caching. + + Args: + context: Dictionary of context, including 'vertices' and 'vertices_mask'. + See _prepare_context for details. + max_sample_length: Maximum length of sampled vertex sequences. Sequences + that do not complete are truncated. + temperature: Scalar softmax temperature > 0. + top_k: Number of tokens to keep for top-k sampling. + top_p: Proportion of probability mass to keep for top-p sampling. + only_return_complete: If True, only return completed samples. Otherwise + return all samples along with completed indicator. + + Returns: + outputs: Output dictionary with fields: + 'completed': Boolean tensor of shape [num_samples]. If True then + corresponding sample completed within max_sample_length. + 'faces': Tensor of samples with shape [num_samples, num_verts, 3]. + 'num_face_indices': Tensor indicating number of vertices for each + example in padded vertex samples. + """ + vertex_embeddings, global_context, seq_context = self._prepare_context( + context, is_training=False) + num_samples = tf.shape(vertex_embeddings)[0] + + def _loop_body(i, samples, cache): + """While-loop body for autoregression calculation.""" + pred_dist = self._create_dist( + vertex_embeddings, + context['vertices_mask'], + samples, + global_context_embedding=global_context, + sequential_context_embeddings=seq_context, + cache=cache, + temperature=temperature, + top_k=top_k, + top_p=top_p) + next_sample = pred_dist.sample()[:, -1:] + samples = tf.concat([samples, next_sample], axis=1) + return i + 1, samples, cache + + def _stopping_cond(i, samples, cache): + """Stopping conditions for autoregressive calculation.""" + del i, cache # Unused + return tf.reduce_any(tf.reduce_all(tf.not_equal(samples, 0), axis=-1)) + + # While loop sampling with caching + samples = tf.zeros([num_samples, 0], dtype=tf.int32) + max_sample_length = max_sample_length or self.max_seq_length + cache, cache_shape_invariants = self.decoder.create_init_cache(num_samples) + _, f, _ = tf.while_loop( + cond=_stopping_cond, + body=_loop_body, + loop_vars=(0, samples, cache), + shape_invariants=(tf.TensorShape([]), tf.TensorShape([None, None]), + cache_shape_invariants), + back_prop=False, + parallel_iterations=1, + maximum_iterations=max_sample_length) + + # Record completed samples + complete_samples = tf.reduce_any(tf.equal(f, 0), axis=-1) + + # Find number of faces + sample_length = tf.shape(f)[-1] + # Get largest new face (1) index as stopping point for incomplete samples. + max_one_ind = tf.reduce_max( + tf.range(sample_length)[None] * tf.cast(tf.equal(f, 1), tf.int32), + axis=-1) + zero_inds = tf.cast( + tf.argmax(tf.cast(tf.equal(f, 0), tf.int32), axis=-1), tf.int32) + num_face_indices = tf.where(complete_samples, zero_inds, max_one_ind) + 1 + + # Mask faces beyond stopping token with zeros + # This mask has a -1 in order to replace the last new face token with zero + faces_mask = tf.cast( + tf.range(sample_length)[None] < num_face_indices[:, None] - 1, tf.int32) + f *= faces_mask + # This is the real mask + faces_mask = tf.cast( + tf.range(sample_length)[None] < num_face_indices[:, None], tf.int32) + + # Pad to maximum size with zeros + pad_size = max_sample_length - sample_length + f = tf.pad(f, [[0, 0], [0, pad_size]]) + + if only_return_complete: + f = tf.boolean_mask(f, complete_samples) + num_face_indices = tf.boolean_mask(num_face_indices, complete_samples) + context = tf.nest.map_structure( + lambda x: tf.boolean_mask(x, complete_samples), context) + complete_samples = tf.boolean_mask(complete_samples, complete_samples) + + # outputs + outputs = { + 'context': context, + 'completed': complete_samples, + 'faces': f, + 'num_face_indices': num_face_indices, + } + return outputs diff --git a/polygen/run.sh b/polygen/run.sh new file mode 100644 index 0000000..3276ec2 --- /dev/null +++ b/polygen/run.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# Copyright 2020 Deepmind Technologies Limited. +# +# 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. + +python3 -m venv polygen +source polygen/bin/activate +pip3 install . +python3 model_test.py +deactivate diff --git a/polygen/sample-pretrained.ipynb b/polygen/sample-pretrained.ipynb new file mode 100644 index 0000000..353febd --- /dev/null +++ b/polygen/sample-pretrained.ipynb @@ -0,0 +1,294 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "lUh_eWpealmh" + }, + "source": [ + "Copyright 2020 DeepMind Technologies Limited\n", + "\n", + "Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "you may not use this file except in compliance with the License.\n", + "You may obtain a copy of the License at\n", + "\n", + " https://www.apache.org/licenses/LICENSE-2.0\n", + "\n", + "Unless required by applicable law or agreed to in writing, software\n", + "distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "See the License for the specific language governing permissions and\n", + "limitations under the License." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "kYd9gIfGJYZ8" + }, + "source": [ + "## Clone repo and import dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Ux33ZDQ_tqUV" + }, + "outputs": [], + "source": [ + "!pip install tensorflow==1.15\n", + "!pip install dm-sonnet==1.36\n", + "!pip install tensor2tensor==1.14\n", + "\n", + "import time\n", + "import numpy as np\n", + "import tensorflow.compat.v1 as tf\n", + "tf.logging.set_verbosity(tf.logging.ERROR) # Hide TF deprecation messages\n", + "import matplotlib.pyplot as plt\n", + "\n", + "!git clone https://github.com/deepmind/deepmind-research.git deepmind_research\n", + "%cd deepmind_research/polygen\n", + "import modules\n", + "import data_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "YUZNqHTVJbm3" + }, + "source": [ + "## Download pre-trained model weights from Google Cloud Storage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "LpZjBUmq10gX" + }, + "outputs": [], + "source": [ + "!mkdir /tmp/vertex_model\n", + "!mkdir /tmp/face_model\n", + "!gsutil cp gs://deepmind-research-polygen/vertex_model.tar.gz /tmp/vertex_model/\n", + "!gsutil cp gs://deepmind-research-polygen/face_model.tar.gz /tmp/face_model/\n", + "!tar xvfz /tmp/vertex_model/vertex_model.tar.gz -C /tmp/vertex_model/\n", + "!tar xvfz /tmp/face_model/face_model.tar.gz -C /tmp/face_model/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "vXhMOoxaJ3Xb" + }, + "source": [ + "## Pre-trained model config" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "7VGSSS9vJSn-" + }, + "outputs": [], + "source": [ + "vertex_module_config=dict(\n", + " decoder_config=dict(\n", + " hidden_size=512,\n", + " fc_size=2048,\n", + " num_heads=8,\n", + " layer_norm=True,\n", + " num_layers=24,\n", + " dropout_rate=0.4,\n", + " re_zero=True,\n", + " memory_efficient=True\n", + " ),\n", + " quantization_bits=8,\n", + " class_conditional=True,\n", + " max_num_input_verts=5000,\n", + " use_discrete_embeddings=True,\n", + " )\n", + "\n", + "face_module_config=dict(\n", + " encoder_config=dict(\n", + " hidden_size=512,\n", + " fc_size=2048,\n", + " num_heads=8,\n", + " layer_norm=True,\n", + " num_layers=10,\n", + " dropout_rate=0.2,\n", + " re_zero=True,\n", + " memory_efficient=True,\n", + " ),\n", + " decoder_config=dict(\n", + " hidden_size=512,\n", + " fc_size=2048,\n", + " num_heads=8,\n", + " layer_norm=True,\n", + " num_layers=14,\n", + " dropout_rate=0.2,\n", + " re_zero=True,\n", + " memory_efficient=True,\n", + " ),\n", + " class_conditional=False,\n", + " decoder_cross_attention=True,\n", + " use_discrete_vertex_embeddings=True,\n", + " max_seq_length=8000,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "WNXf_XbuKW4S" + }, + "source": [ + "## Generate class-conditional samples\n", + "\n", + "Try varying the `class_id` parameter to generate meshes from different object categories. Good classes to try are tables (49), lamps (30), and cabinets (32). \n", + "\n", + "We can also specify the maximum number of vertices / face indices we want to see in the generated meshes using `max_num_vertices` and `max_num_face_indices`. The code will keep generating batches of samples until there are at least `num_samples_min` complete samples with the required number of vertices / faces.\n", + "\n", + "`top_p_vertex_model` and `top_p_face_model` control how varied the outputs are, with `1.` being the most varied, and `0.` the least varied. `0.9` is a good value for both the vertex and face models.\n", + "\n", + "Sampling should take around 2-5 minutes with a colab GPU using the default settings depending on the object class." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "kqKMbPJJu3lk" + }, + "outputs": [], + "source": [ + "class_id = '49) table' #@param ['0) airplane,aeroplane,plane','1) ashcan,trash can,garbage can,wastebin,ash bin,ash-bin,ashbin,dustbin,trash barrel,trash bin','2) bag,traveling bag,travelling bag,grip,suitcase','3) basket,handbasket','4) bathtub,bathing tub,bath,tub','5) bed','6) bench','7) birdhouse','8) bookshelf','9) bottle','10) bowl','11) bus,autobus,coach,charabanc,double-decker,jitney,motorbus,motorcoach,omnibus,passenger vehi','12) cabinet','13) camera,photographic camera','14) can,tin,tin can','15) cap','16) car,auto,automobile,machine,motorcar','17) cellular telephone,cellular phone,cellphone,cell,mobile phone','18) chair','19) clock','20) computer keyboard,keypad','21) dishwasher,dish washer,dishwashing machine','22) display,video display','23) earphone,earpiece,headphone,phone','24) faucet,spigot','25) file,file cabinet,filing cabinet','26) guitar','27) helmet','28) jar','29) knife','30) lamp','31) laptop,laptop computer','32) loudspeaker,speaker,speaker unit,loudspeaker system,speaker system','33) mailbox,letter box','34) microphone,mike','35) microwave,microwave oven','36) motorcycle,bike','37) mug','38) piano,pianoforte,forte-piano','39) pillow','40) pistol,handgun,side arm,shooting iron','41) pot,flowerpot','42) printer,printing machine','43) remote control,remote','44) rifle','45) rocket,projectile','46) skateboard','47) sofa,couch,lounge','48) stove','49) table','50) telephone,phone,telephone set','51) tower','52) train,railroad train','53) vessel,watercraft','54) washer,automatic washer,washing machine']\n", + "num_samples_min = 1 #@param\n", + "num_samples_batch = 8 #@param\n", + "max_num_vertices = 400 #@param\n", + "max_num_face_indices = 2000 #@param\n", + "top_p_vertex_model = 0.9 #@param\n", + "top_p_face_model = 0.9 #@param\n", + "\n", + "tf.reset_default_graph()\n", + "\n", + "# Build models\n", + "vertex_model = modules.VertexModel(**vertex_module_config)\n", + "face_model = modules.FaceModel(**face_module_config)\n", + "\n", + "# Tile out class label to every element in batch\n", + "class_id = int(class_id.split(')')[0])\n", + "vertex_model_context = {'class_label': tf.fill([num_samples_batch,], class_id)}\n", + "vertex_samples = vertex_model.sample(\n", + " num_samples_batch, context=vertex_model_context, \n", + " max_sample_length=max_num_vertices, top_p=top_p_vertex_model, \n", + " recenter_verts=True, only_return_complete=True)\n", + "vertex_model_saver = tf.train.Saver(var_list=vertex_model.variables)\n", + "\n", + "# The face model generates samples conditioned on a context, which here is\n", + "# the vertex model samples\n", + "face_samples = face_model.sample(\n", + " vertex_samples, max_sample_length=max_num_face_indices, \n", + " top_p=top_p_face_model, only_return_complete=True)\n", + "face_model_saver = tf.train.Saver(var_list=face_model.variables)\n", + "\n", + "# Start sampling\n", + "start = time.time()\n", + "print('Generating samples...')\n", + "with tf.Session() as sess:\n", + " vertex_model_saver.restore(sess, '/tmp/vertex_model/model')\n", + " face_model_saver.restore(sess, '/tmp/face_model/model')\n", + " mesh_list = []\n", + " num_samples_complete = 0\n", + " while num_samples_complete \u003c num_samples_min:\n", + " v_samples_np = sess.run(vertex_samples)\n", + " if v_samples_np['completed'].size == 0:\n", + " print('No vertex samples completed in this batch. Try increasing ' +\n", + " 'max_num_vertices.')\n", + " continue\n", + " f_samples_np = sess.run(\n", + " face_samples,\n", + " {vertex_samples[k]: v_samples_np[k] for k in vertex_samples.keys()})\n", + " v_samples_np = f_samples_np['context']\n", + " num_samples_complete_batch = f_samples_np['completed'].sum()\n", + " num_samples_complete += num_samples_complete_batch\n", + " print('Num. samples complete: {}'.format(num_samples_complete))\n", + " for k in range(num_samples_complete_batch):\n", + " verts = v_samples_np['vertices'][k][:v_samples_np['num_vertices'][k]]\n", + " faces = data_utils.unflatten_faces(\n", + " f_samples_np['faces'][k][:f_samples_np['num_face_indices'][k]])\n", + " mesh_list.append({'vertices': verts, 'faces': faces})\n", + "end = time.time()\n", + "print('sampling time: {}'.format(end - start))\n", + "\n", + "data_utils.plot_meshes(mesh_list, ax_lims=0.4) " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "OOQV6pMvSymz" + }, + "source": [ + "## Export meshes as `.obj` files\n", + "Pick a `mesh_id` (starting at 0) corresponding to the samples generated above. Refresh the colab file browser to find an `.obj` file with the mesh data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "fO0Klbq2Sx0m" + }, + "outputs": [], + "source": [ + "mesh_id = 4 #@param\n", + "data_utils.write_obj(\n", + " mesh_list[mesh_id]['vertices'], mesh_list[mesh_id]['faces'], \n", + " 'mesh-{}.obj'.format(mesh_id))" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "sampling-pretrained.ipynb", + "provenance": [ + { + "file_id": "1yj-oHYqCnwYVGSM22coa68NqnSoNdyVr", + "timestamp": 1591622616999 + }, + { + "file_id": "1v_7DtLnpXrEhVbwZhzDiVQW7ghroi11Y", + "timestamp": 1591264007511 + } + ] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/polygen/setup.py b/polygen/setup.py new file mode 100644 index 0000000..80191e8 --- /dev/null +++ b/polygen/setup.py @@ -0,0 +1,40 @@ +# Copyright 2020 DeepMind Technologies Limited +# +# 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 +# +# https://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. + +"""Setup for pip package.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from setuptools import find_packages +from setuptools import setup + + +REQUIRED_PACKAGES = ['numpy', 'dm-sonnet==1.36', 'tensorflow==1.14', + 'tensor2tensor==1.15', 'networkx', 'matplotlib', 'six'] + +setup( + name='polygen', + version='0.1', + description='A library for PolyGen: An Autoregressive Generative Model of 3D Meshes.', + url='https://github.com/deepmind/deepmind-research/polygen', + author='DeepMind', + author_email='no-reply@google.com', + # Contained modules and scripts. + packages=find_packages(), + install_requires=REQUIRED_PACKAGES, + platforms=['any'], + license='Apache 2.0', +) diff --git a/polygen/training.ipynb b/polygen/training.ipynb new file mode 100644 index 0000000..b80e4ed --- /dev/null +++ b/polygen/training.ipynb @@ -0,0 +1,328 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "szgmaK1HajOc" + }, + "source": [ + "Copyright 2020 DeepMind Technologies Limited\n", + "\n", + "Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "you may not use this file except in compliance with the License.\n", + "You may obtain a copy of the License at\n", + "\n", + " https://www.apache.org/licenses/LICENSE-2.0\n", + "\n", + "Unless required by applicable law or agreed to in writing, software\n", + "distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "See the License for the specific language governing permissions and\n", + "limitations under the License." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "_dv0afOrKheU" + }, + "source": [ + "## Clone repo and import dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Ux33ZDQ_tqUV" + }, + "outputs": [], + "source": [ + "!pip install tensorflow==1.15\n", + "!pip install dm-sonnet==1.36\n", + "!pip install tensor2tensor==1.14\n", + "\n", + "import os\n", + "import numpy as np\n", + "import tensorflow.compat.v1 as tf\n", + "tf.logging.set_verbosity(tf.logging.ERROR) # Hide TF deprecation messages\n", + "import matplotlib.pyplot as plt\n", + "\n", + "!git clone https://github.com/deepmind/deepmind-research.git deepmind_research\n", + "%cd deepmind_research/polygen\n", + "import modules\n", + "import data_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "U3GDZhJ5wGOf" + }, + "source": [ + "## Prepare a synthetic dataset\n", + "We prepare a dataset of meshes using four simple geometric primitives.\n", + "\n", + "The important function here is `data_utils.load_process_mesh`, which loads the raw `.obj` file, normalizes and centers the meshes, and applies quantization to the vertex positions. The mesh faces are flattened and treated as a long sequence, with a new-face token (`=1`) separating the faces. For each of the four synthetic meshes, we associate a unique class label, so we can train class-conditional models.\n", + "\n", + "After processing the raw mesh data into numpy arrays, we create a `tf.data.Dataset` that we can use to feed data to our models. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "3QAqwyZjtOdC" + }, + "outputs": [], + "source": [ + "# Prepare synthetic dataset\n", + "ex_list = []\n", + "for k, mesh in enumerate(['cube', 'cylinder', 'cone', 'icosphere']):\n", + " mesh_dict = data_utils.load_process_mesh(\n", + " os.path.join('meshes', '{}.obj'.format(mesh)))\n", + " mesh_dict['class_label'] = k\n", + " ex_list.append(mesh_dict)\n", + "synthetic_dataset = tf.data.Dataset.from_generator(\n", + " lambda: ex_list, \n", + " output_types={\n", + " 'vertices': tf.int32, 'faces': tf.int32, 'class_label': tf.int32},\n", + " output_shapes={\n", + " 'vertices': tf.TensorShape([None, 3]), 'faces': tf.TensorShape([None]), \n", + " 'class_label': tf.TensorShape(())}\n", + " )\n", + "ex = synthetic_dataset.make_one_shot_iterator().get_next()\n", + "\n", + "# Inspect the first mesh\n", + "with tf.Session() as sess:\n", + " ex_np = sess.run(ex)\n", + "print(ex_np)\n", + "\n", + "# Plot the meshes\n", + "mesh_list = []\n", + "with tf.Session() as sess:\n", + " for i in range(4):\n", + " ex_np = sess.run(ex)\n", + " mesh_list.append(\n", + " {'vertices': data_utils.dequantize_verts(ex_np['vertices']), \n", + " 'faces': data_utils.unflatten_faces(ex_np['faces'])})\n", + "data_utils.plot_meshes(mesh_list, ax_lims=0.4)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "9G2FCQQyyTXw" + }, + "source": [ + "## Vertex model\n", + "\n", + "#### Prepare the dataset for vertex model training\n", + "We need to perform some additional processing to make the dataset ready for vertex model training. In particular, `data_utils.make_vertex_model_dataset` flattens the `[V, 3]` vertex arrays, ordering by `Z-\u003eY-\u003eX` coordinates. It also creates masks, which are used to mask padded elements in data batches. We also add random shifts to make the modelling task more challenging.\n", + "\n", + "#### Create a vertex model\n", + "`modules.VertexModel` is a Sonnet module that. Calling the module on a batch of data will produce outputs which are the sequential predictions for each vertex coordinate. The basis of the vertex model is a Transformer decoder, and we specify it's parameters in `decoder_config`. \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "o2KCoDeeFP8C" + }, + "outputs": [], + "source": [ + "# Prepare the dataset for vertex model training\n", + "vertex_model_dataset = data_utils.make_vertex_model_dataset(\n", + " synthetic_dataset, apply_random_shift=False)\n", + "vertex_model_dataset = vertex_model_dataset.repeat()\n", + "vertex_model_dataset = vertex_model_dataset.padded_batch(\n", + " 4, padded_shapes=vertex_model_dataset.output_shapes)\n", + "vertex_model_dataset = vertex_model_dataset.prefetch(1)\n", + "vertex_model_batch = vertex_model_dataset.make_one_shot_iterator().get_next()\n", + "\n", + "# Create vertex model\n", + "vertex_model = modules.VertexModel(\n", + " decoder_config={\n", + " 'hidden_size': 128,\n", + " 'fc_size': 512, \n", + " 'num_layers': 3,\n", + " 'dropout_rate': 0.\n", + " },\n", + " class_conditional=True,\n", + " num_classes=4,\n", + " max_num_input_verts=250,\n", + " quantization_bits=8,\n", + ")\n", + "vertex_model_pred_dist = vertex_model(vertex_model_batch)\n", + "vertex_model_loss = -tf.reduce_sum(\n", + " vertex_model_pred_dist.log_prob(vertex_model_batch['vertices_flat']) * \n", + " vertex_model_batch['vertices_flat_mask'])\n", + "vertex_samples = vertex_model.sample(\n", + " 4, context=vertex_model_batch, max_sample_length=200, top_p=0.95,\n", + " recenter_verts=False, only_return_complete=False)\n", + "\n", + "print(vertex_model_batch)\n", + "print(vertex_model_pred_dist)\n", + "print(vertex_samples)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "-9RNYr5x1jov" + }, + "source": [ + "## Face model\n", + "\n", + "#### Prepare the dataset for face model training\n", + "We need to perform some additional processing to make the dataset ready for vertex model training. In particular, `data_utils.make_vertex_model_dataset` flattens the `[V, 3]` vertex arrays, ordering by `Z-\u003eY-\u003eX` coordinates. It also creates masks, which are used to mask padded elements in data batches. We also add random shifts to make the modelling task more challenging.\n", + "\n", + "#### Create a face model\n", + "`modules.VertexModel` is a Sonnet module that. Calling the module on a batch of data will produce outputs which are the sequential predictions for each vertex coordinate. The basis of the vertex model is a Transformer decoder, and we specify it's parameters in `decoder_config`. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "a2yO6dOGzn8c" + }, + "outputs": [], + "source": [ + "face_model_dataset = data_utils.make_face_model_dataset(\n", + " synthetic_dataset, apply_random_shift=False)\n", + "face_model_dataset = face_model_dataset.repeat()\n", + "face_model_dataset = face_model_dataset.padded_batch(\n", + " 4, padded_shapes=face_model_dataset.output_shapes)\n", + "face_model_dataset = face_model_dataset.prefetch(1)\n", + "face_model_batch = face_model_dataset.make_one_shot_iterator().get_next()\n", + "\n", + "# Create face model\n", + "face_model = modules.FaceModel(\n", + " encoder_config={\n", + " 'hidden_size': 128,\n", + " 'fc_size': 512, \n", + " 'num_layers': 3,\n", + " 'dropout_rate': 0.\n", + " },\n", + " decoder_config={\n", + " 'hidden_size': 128,\n", + " 'fc_size': 512, \n", + " 'num_layers': 3,\n", + " 'dropout_rate': 0.\n", + " },\n", + " class_conditional=False,\n", + " max_seq_length=500,\n", + " quantization_bits=8,\n", + " decoder_cross_attention=True,\n", + " use_discrete_vertex_embeddings=True,\n", + ")\n", + "face_model_pred_dist = face_model(face_model_batch)\n", + "face_model_loss = -tf.reduce_sum(\n", + " face_model_pred_dist.log_prob(face_model_batch['faces']) * \n", + " face_model_batch['faces_mask'])\n", + "face_samples = face_model.sample(\n", + " context=vertex_samples, max_sample_length=500, top_p=0.95,\n", + " only_return_complete=False)\n", + "print(face_model_batch)\n", + "print(face_model_pred_dist)\n", + "print(face_samples)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "hL7yloXB1pUb" + }, + "source": [ + "## Train on the synthetic data\n", + "\n", + "Now that we've created vertex and face models and their respective data loaders, we can train them and look at some outputs. While we train the models together here, they can be trained seperately and recombined later if required. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "hjrbofa8zqQt" + }, + "outputs": [], + "source": [ + "# Optimization settings\n", + "learning_rate = 5e-4\n", + "training_steps = 500\n", + "check_step = 5\n", + "\n", + "# Create an optimizer an minimize the summed log probability of the mesh \n", + "# sequences\n", + "optimizer = tf.train.AdamOptimizer(learning_rate)\n", + "vertex_model_optim_op = optimizer.minimize(vertex_model_loss)\n", + "face_model_optim_op = optimizer.minimize(face_model_loss)\n", + "\n", + "# Training loop\n", + "with tf.Session() as sess:\n", + " sess.run(tf.global_variables_initializer())\n", + " for n in range(training_steps):\n", + " if n % check_step == 0:\n", + " v_loss, f_loss = sess.run((vertex_model_loss, face_model_loss))\n", + " print('Step {}'.format(n))\n", + " print('Loss (vertices) {}'.format(v_loss))\n", + " print('Loss (faces) {}'.format(f_loss))\n", + " v_samples_np, f_samples_np, b_np = sess.run(\n", + " (vertex_samples, face_samples, vertex_model_batch))\n", + " mesh_list = []\n", + " for n in range(4):\n", + " mesh_list.append(\n", + " {\n", + " 'vertices': v_samples_np['vertices'][n][:v_samples_np['num_vertices'][n]],\n", + " 'faces': data_utils.unflatten_faces(\n", + " f_samples_np['faces'][n][:f_samples_np['num_face_indices'][n]])\n", + " }\n", + " )\n", + " data_utils.plot_meshes(mesh_list, ax_lims=0.5)\n", + " sess.run((vertex_model_optim_op, face_model_optim_op))" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "training.ipynb", + "provenance": [ + { + "file_id": "1QL8ib2FKPGUWFQbuX8AttUk-H34Al8Ue", + "timestamp": 1591364245034 + }, + { + "file_id": "1v_7DtLnpXrEhVbwZhzDiVQW7ghroi11Y", + "timestamp": 1591355096822 + } + ], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}