From 94536d60ab61730559798a6a1b2881285d07b243 Mon Sep 17 00:00:00 2001 From: wangguojim <862876363@qq.com> Date: Sat, 21 May 2022 05:58:12 +0000 Subject: [PATCH 01/44] add glm blank fillin tasks --- examples/glm_blank_fillin/README.md | 94 ++++++++ examples/glm_blank_fillin/args1.pt | Bin 0 -> 3540 bytes .../glm_blank_fillin/glm_generate_samples.py | 59 +++++ .../glm_blank_fillin/glm_generate_samples2.py | 214 ++++++++++++++++++ flagai/model/glm_model.py | 4 +- flagai/model/predictor/utils.py | 198 +++++++++++----- 6 files changed, 515 insertions(+), 54 deletions(-) create mode 100644 examples/glm_blank_fillin/README.md create mode 100644 examples/glm_blank_fillin/args1.pt create mode 100755 examples/glm_blank_fillin/glm_generate_samples.py create mode 100755 examples/glm_blank_fillin/glm_generate_samples2.py diff --git a/examples/glm_blank_fillin/README.md b/examples/glm_blank_fillin/README.md new file mode 100644 index 00000000..12d2ec28 --- /dev/null +++ b/examples/glm_blank_fillin/README.md @@ -0,0 +1,94 @@ +GLM naturally handles variable-length blank filling which is crucial for many downstream tasks. +Based on autoregressive blank-filling, GLM randomly +blank out continuous spans of tokens from the input text, +following the idea of autoencoding, and train the model to +reconstruct the spans, following the idea of autoregressive +pre-training. +As a result, GLM learns +autoregressive generation during pre-training. + + +GLM finetunes on downstream tasks and reformulate them as blank-filling generation. Each task is associated with a human-crafted cloze question, and the model predicts the answer +to the cloze. For example, a sentiment classification task +is reformulated as filling the blank in “[SENTENCE]. It’s +really ”. The prediction of “good” or “bad” indicates the +sentiment being positive or negative. With such formulation, +GLM benefits from the consistency between pretraining and +finetuning, because both pretraining and finetuning involves +training the model to generate text given context. To make the pre-training +method better suited for text generation tasks, GLM also studys +a multi-task pre-training setup, where the model is jointly +trained to reconstruct masked spans and generate longer +text. + +As example, GLM finish the question task as an autoregressive blank in- +filling task + +```python +import torch +from flagai.model.glm_model import GLMModel +from flagai.data.tokenizer import GLMLargeChTokenizer +from flagai.model.predictor.predictor import Predictor +if __name__ == "__main__": + """Main training program.""" + print('Generate Samples') + tokenizer = GLMLargeChTokenizer(vocab_path='./checkpoints/glm-large-ch/cog-pretrain.model', + add_block_symbols=True, + add_task_mask=True, + add_decoder_mask=False, + fix_command_token=False) + model = GLMModel.from_pretrain(model_name='glm-large-ch', only_download_config=False) + model.cuda(torch.cuda.current_device()) + predictor = Predictor(model, tokenizer) + # question-answering + text = '问题:啤酒伤胃吗?回答:[gMASK]' + output=predictor.predict_generate_randomsample(text) + print(text,'\n',output) +``` + +Similar to BERT, GLM can predict masked tokens as + +```python +import torch +from flagai.model.glm_model import GLMModel +from flagai.data.tokenizer import GLMLargeChTokenizer +from flagai.model.predictor.predictor import Predictor +if __name__ == "__main__": + """Main training program.""" + print('Generate Samples') + tokenizer = GLMLargeChTokenizer(vocab_path='./checkpoints/glm-large-ch/cog-pretrain.model', + add_block_symbols=True, + add_task_mask=True, + add_decoder_mask=False, + fix_command_token=False) + model = GLMModel.from_pretrain(model_name='glm-large-ch', only_download_config=False) + model.cuda(torch.cuda.current_device()) + predictor = Predictor(model, tokenizer) + # question-answering + text = '北京故宫是中国[MASK]非物质文化遗产。' + output=predictor.predict_generate_randomsample(text) + print(text,'\n',output) +``` +and predict masked sentences as + +```python +import torch +from flagai.model.glm_model import GLMModel +from flagai.data.tokenizer import GLMLargeChTokenizer +from flagai.model.predictor.predictor import Predictor +if __name__ == "__main__": + """Main training program.""" + print('Generate Samples') + tokenizer = GLMLargeChTokenizer(vocab_path='./checkpoints/glm-large-ch/cog-pretrain.model', + add_block_symbols=True, + add_task_mask=True, + add_decoder_mask=False, + fix_command_token=False) + model = GLMModel.from_pretrain(model_name='glm-large-ch', only_download_config=False) + model.cuda(torch.cuda.current_device()) + predictor = Predictor(model, tokenizer) + # question-answering + text = '人工智能是一个以计算机科学为基础,由计算机、数学、哲学等多学科交叉融合的交叉学科,[sMASK],具有非常巨大的前景。' + output=predictor.predict_generate_randomsample(text) + print(text,'\n',output) +``` \ No newline at end of file diff --git a/examples/glm_blank_fillin/args1.pt b/examples/glm_blank_fillin/args1.pt new file mode 100644 index 0000000000000000000000000000000000000000..6cde9856bb77f5a5242cd2d0c0cf5cae378eb75c GIT binary patch literal 3540 zcmZu!zi%VQ6_)OJ7m+kck#{}^iHjgr44+PtFF6D$?7}uw2ow%T`oVB_NKQDrGntu{ z#0vsk00WkQfg5j%_>XYs!u3@Fk`(UTB~FR}36P{py5xJa%UzyqHrjdf>&^GR_r0g* zo!|U!uoHh_kK2Xe)`>E7&v+)B;fW|eF5mcd`K$5=VdyQ--CWyDSazw(>o77_z$kN( zvYD`+Od?NoiUp~Ne_|<;mNB{qJX2e_8%J z4C@oW?!yo+nZkdAcdupqk{Rt}^j>5$k)|?Vxad*uTqk^1d-(iC=%zv#CUZ$Ryq@uu zVC@Q)%5&-DObIqym#5FeATb5g#>)&ZwAe8ugV#1$GM@4bmd@N9KPj)maBd#I#hTk` zZL~D6g=G{iUax@k+6dPy;!0VO76{~Z=q=X{APOe|*R9Y~+BxPDu0(kT@R||3ka?;v z%IV*3hi)bjg}CN)H;md)Rko9N{#CPQBrc7xGJ^vw2Ybq}w=n+T@ehAAEkkd{JsuXL zdD;ozU09w{6D18J2XXP{as5bhCV?It z+zBJaXF@TTY3-ME!byd~&Q5qm=>=GTmFHZQr)lWBBFng4g95e;J7wrNI8#o)=!6Mk zA$-d)3G!cu`<1nYI^%8y`%uNS;_KRvvn`ABYeX^JRY*pTYudGzFxtwvTgqbeohM)Y z{q=Vb!rcpQv%+j)Ja8A1VpX368ajSX1exUGg3&iUL?oc<8cy}1C89@>8^mGr{OQ%b zFvxYaEwUY3`Wu6d(07yu)@N}YeO6gfuZxCi-F<9}L%`q=zqC*>amKK>F^-2_hrKy~ z@I_9v9|O-KgWKG5nvT2frP6sTXN4#6;t3KbMQHLQQDE+S?>%KQGx+S}8i!D>AO{!} za0OTQW*DxR%8;F1iVn`e;5u|k2AQ#X21Ng~$qeKH7%`Vh-JBZG6lK^ZN}E071vktg zL!hUk-qlcS^3vpH>x;+n7xwx2g4GU+eBqbn>FqFdOAXJQ_{Gh`_8s^OS%TWG|cMytxx?}fe>8J2KgSb_rGbq^a+OLUsas zLlFY>;A}*9LzJfWW~kJlB)2FMq-IoWk;C7rqfDU$X`y5cC@JZdu=FY=q+9|vJ-{K; zm{}Ngy>JliYHE-EM$J15ugW|YShCP9j^SKtGveTpzw~9e17BoThTVtAzsQJ{SmSe( z1Z5r9X6h{5aYmuqhP~sXqoaq%509aHKuYmv>!=hl(f5~J&2QL-l?+f_LvLc~Axdi} z*v}n$hU+jvV-wGAQjm1HPtm&2b`^`jt#Cimo60w3>% zEN%*ucTq-A41W6bXOuIsCkW%Yykv<+^~lpYm#)GHFNAy5m?8$%NjUVdsxNoqH^3_J z96yIpYa6RdZ;S54ypYVz!FnQm%AJ-7871on^7i}dkG?tzKMCEo-3^`C z((_5%k$h^=6^x5jn5ISSZ%4$^QL~PLdwWUJ6 zqnwAdOpp!&k=y!51_w;2O`w#bY^(p7KsQnw>U#+H`pCM&kL`Z!D{;nt+kn8wxm*C` zYC-IrHw$QhgsvA1+D(~}IHi*mDMw4uiERe1>_Kf*+6eO`U8A#>3B;{w+|hsty-|nh K(-+0;(f 0: + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + + +# from model import GLMModel + + + +def setup_model(args): + """Setup model and optimizer.""" + # model = GLMModel.from_pretrain(model_name='glm_large_ch') + + from model import GLMModel + model = GLMModel(num_layers=args.num_layers, + vocab_size=args.vocab_size, + hidden_size=args.hidden_size, + num_attention_heads=args.num_attention_heads, + embedding_dropout_prob=args.hidden_dropout, + attention_dropout_prob=args.attention_dropout, + output_dropout_prob=args.hidden_dropout, + max_sequence_length=args.max_position_embeddings, + max_memory_length=args.mem_length, + checkpoint_activations=args.checkpoint_activations, + checkpoint_num_layers=args.checkpoint_num_layers, + parallel_output=False, + relative_encoding=False, + block_position_encoding=args.block_lm and not args.masked_lm, + output_predict=True, + spell_length=None, + spell_func='lstm', + attention_scale=1.0) + + + args.no_load_optim = True + + _ = load_checkpoint( + model, None, None, args) + model.cuda(torch.cuda.current_device()) + return model + + + +def glm_sample_sequence(model, tokenizer, context_tokens, context_length, + mems=None, end_tokens=None,out_seq_length=512,temperature=0.9, + top_k=40): + tokens = context_tokens.new_full((1, 1), tokenizer.get_command('sop').Id) + counter = 0 + if mems is None: + mems = [] + + last_beam_num = 1 + while counter < out_seq_length: + position_ids = context_tokens.new_ones(last_beam_num, 2, 1) + position_ids[:, 0] = context_length + position_ids[:, 1] = counter + 1 + attention_mask = context_tokens.new_zeros([1], device=context_tokens.device, dtype=torch.long) + last_token = tokens[:, -1:] + next_token_logits, *mems = model(last_token, position_ids, attention_mask, *mems) + next_token_logits = next_token_logits[:, -1] + next_token_logits /= temperature + indices_to_remove = next_token_logits < torch.topk(next_token_logits, top_k)[0][..., -1, None] + next_token_logits[indices_to_remove] = -float('Inf') + log_probs = F.softmax(next_token_logits, dim=-1) + prev = torch.multinomial(log_probs, num_samples=1)[0] + is_end = prev.item() in end_tokens + if is_end: + break + prev = prev.view(1, 1) + tokens = prev if tokens is None else torch.cat((tokens, prev), dim=1) + counter += 1 + return torch.cat((context_tokens, tokens), dim=1), mems + + + +def glm_generate_sample(model, tokenizer,text, top_k=40,seq_length=512,out_seq_length=512, + eod_token=50000,temperature=0.9, ): + device=torch.cuda.current_device() + model.eval() + generation_mask = '[gMASK]' + if 'MASK]' not in text: + text += ' ' + generation_mask + context_tokens = tokenizer.EncodeAsIds(text) + context_tokens = [tokenizer.get_command('ENC').Id] + context_tokens + if not text.endswith('[gMASK]'): + context_tokens = context_tokens + [tokenizer.get_command('eos').Id] + context_length = len(context_tokens) + context_length_tensor = torch.cuda.LongTensor([context_length]) + context_length = context_length_tensor[0].item() + context_tokens_tensor = torch.cuda.LongTensor(context_tokens) + text = tokenizer.DecodeIds(context_tokens_tensor.tolist()) + + start_time = time.time() + mems = [] + tokens = context_tokens_tensor + tokens = tokens.view(1, -1).contiguous() + tokens = tokens.to(device) + attention_mask = torch.tensor([tokens.size(1)], device=device, dtype=torch.long) + position_ids = torch.arange(tokens.size(1), device=device, dtype=torch.long) + block_position_ids = torch.zeros(tokens.size(1), device=device, dtype=torch.long) + position_ids = torch.stack((position_ids, block_position_ids), dim=0) + position_ids = position_ids.unsqueeze(0) + mask_tokens = ['MASK', 'sMASK', 'gMASK'] + mask_tokens = [tokenizer.get_command(token).Id for token in mask_tokens] + end_tokens = [tokenizer.get_command('eop').Id, eod_token] + mask_positions = [] + for token in mask_tokens: + mask_positions += (context_tokens_tensor == token).nonzero(as_tuple=True)[0].tolist() + mask_positions.sort() + _, *mems = model(tokens, position_ids, attention_mask, *mems) + for mask_position in mask_positions: + position = mask_position + tokens, mems = glm_sample_sequence(model, tokenizer, tokens, position, + mems=mems, end_tokens=end_tokens, + out_seq_length=out_seq_length,temperature=temperature, top_k=top_k) + output_tokens_list = tokens.view(-1).contiguous() + os.system('clear') + print("\nTaken time {:.2f}\n".format(time.time() - start_time), flush=True) + print("\nContext:", text, flush=True) + decode_tokens = tokenizer.DecodeIds(output_tokens_list.tolist()) + trim_decode_tokens = decode_tokens + print("\nGLM:", trim_decode_tokens, flush=True) + + +from argparse import ArgumentParser +from flagai.model.predictor.utils import glm_generate_sample +from flagai.model.predictor.predictor import Predictor +if __name__ == "__main__": + """Main training program.""" + print('Generate Samples') + # Arguments. + parser = ArgumentParser(description='PyTorch BERT Model') + args = parser.parse_args([]) + args.seed=1234 + args.num_layers=24 + args.vocab_size=50048 + args.hidden_size=1024 + args.num_attention_heads=16 + args.hidden_dropout=0.1 + args.attention_dropout=0.1 + args.hidden_dropout=0.1 + args.max_position_embeddings=1024 + args.mem_length = 511 + args.checkpoint_activations = False + args.checkpoint_num_layers = 1 + args.block_lm=True + args.masked_lm=False + args.load='/mnt/model_save/glm-large-ch-300M/186000/' + args.deepspeed=False + args.finetune=False + args.no_load_rng=False + + + # Random seeds for reproducability. + set_random_seed(443) + tokenizer = GLMLargeChTokenizer(vocab_path='./checkpoints/glm-large-ch/cog-pretrain.model', + add_block_symbols=True, + add_task_mask=True, + add_decoder_mask=False, + fix_command_token=False) + + + + # Model, optimizer, and learning rate. + model = setup_model(args) + predictor = Predictor(model, tokenizer) + # generate samples + text = '问题:吃什么东西养胃?回答:[gMASK]' + glm_generate_sample(model, tokenizer,text ) + + # text = '凯旋门位于意大利米兰市古城堡旁。1807年为纪念[MASK]而建,门高25米,顶上矗立两武士青铜古兵车铸像。' + # glm_generate_sample(model, tokenizer, text ) + # + # text = '工业互联网(Industrial Internet)是新一代信息通信技术与工业经济深度融合的新型基础设施、应用模式和工业生态,通过对人、机、物、系统等的全面连接,构建起覆盖全产业链、全价值链的全新制造和服务体系,为工业乃至产业数字化、网络化、智能化发展提供了实现途径,是第四次工业革命的重要基石。[sMASK]它以网络为基础、平台为中枢、数据为要素、安全为保障,既是工业数字化、网络化、智能化转型的基础设施,也是互联网、大数据、人工智能与实体经济深度融合的应用模式,同时也是一种新业态、新产业,将重塑企业形态、供应链和产业链。当前,工业互联网融合应用向国民经济重点行业广泛拓展,形成平台化设计、智能化制造、网络化协同、个性化定制、服务化延伸、数字化管理六大新模式,赋能、赋智、赋值作用不断显现,有力的促进了实体经济提质、增效、降本、绿色、安全发展。' + # glm_generate_sample(model, tokenizer, text) + + + diff --git a/flagai/model/glm_model.py b/flagai/model/glm_model.py index 9884fb81..b7b31cb6 100755 --- a/flagai/model/glm_model.py +++ b/flagai/model/glm_model.py @@ -180,8 +180,8 @@ def forward(self, detach_memory=True, checkpoint=None): batch_size, query_length = hidden_states.size()[:2] - memory_length = 0 - memory_states[0].size(1) if memory_states and memory_states[0] else 0 + memory_length = memory_states[0].size(1) if memory_states else 0 + key_length = query_length + memory_length # attention mask is the beginning postion of B region, \in [0, query_len) is_scalar = torch.numel(attention_mask) == 1 diff --git a/flagai/model/predictor/utils.py b/flagai/model/predictor/utils.py index 3da1e506..6b697692 100644 --- a/flagai/model/predictor/utils.py +++ b/flagai/model/predictor/utils.py @@ -4,7 +4,7 @@ import torch import numpy as np import torch.nn.functional as F - +import time join = os.path.join @@ -568,57 +568,65 @@ def gpt_random_sample(model, tokenizer, text, input_max_length, out_max_length, def glm_random_sample(model, tokenizer, text, out_max_length, top_k, top_p, repetition_penalty, temperature, device): - #tokenizer:GLMChineseSPTokenizer - #model input: - data = tokenizer.encode_plus(text) - input_ids = torch.tensor([data['input_ids']], - device=device, - dtype=torch.long) - position_ids = torch.tensor([data['position_ids']], - device=device, - dtype=torch.long) - attention_mask = torch.tensor(data['attention_mask'], - device=device, - dtype=torch.long) - #choosabel processor to overlay: - lp = [ - TemperatureLogitsProcessor(temperature=temperature), - TopPLogitsProcessor(top_p=top_p), - RepetitionPenaltyLogitsProcessor(penalty=repetition_penalty), - TopKLogitsProcessor(top_k=top_k) - ] - list_processor = ListProcessor(lp) - - output_ids = [] - end_id = tokenizer.command_name_map['eop'].Id - with torch.no_grad(): - for step in range(out_max_length): - scores = model( - input_ids=input_ids, #GLMModel - position_ids=position_ids, - attention_mask=attention_mask)[ - "logits"] #[1,max_src_length,vocab_size] - logit_score = torch.log_softmax(scores[:, -1], - dim=-1) #[1,vocab_size] - logit_score[:, - tokenizer.CommandTokenIds( - exception=["eop", "gMASK"])] = -float('Inf') - - filtered_logits = list_processor(input_ids, logit_score) - prob = F.softmax(filtered_logits, dim=-1) - next_token = torch.multinomial(prob, num_samples=1) - if end_id == next_token.item(): - break - output_ids.append(next_token.item()) - input_ids = torch.cat((input_ids, next_token.long()), dim=1) - new_position_ids = torch.tensor([[[position_ids.size()[2]], [0]]], - device=device, - dtype=torch.long) - position_ids = torch.cat((position_ids, new_position_ids), - dim=2) #shape:[1,2,inputsize] - if not output_ids: - print("None") - return tokenizer.DecodeIds(output_ids) + if 'MASK]' in text: + return glm_generate_sample( model, tokenizer, text, + out_seq_length=out_max_length, top_k=top_k, + temperature=temperature) + + + + else: + #tokenizer:GLMChineseSPTokenizer + #model input: + data = tokenizer.encode_plus(text) + input_ids = torch.tensor([data['input_ids']], + device=device, + dtype=torch.long) + position_ids = torch.tensor([data['position_ids']], + device=device, + dtype=torch.long) + attention_mask = torch.tensor(data['attention_mask'], + device=device, + dtype=torch.long) + #choosabel processor to overlay: + lp = [ + TemperatureLogitsProcessor(temperature=temperature), + TopPLogitsProcessor(top_p=top_p), + RepetitionPenaltyLogitsProcessor(penalty=repetition_penalty), + TopKLogitsProcessor(top_k=top_k) + ] + list_processor = ListProcessor(lp) + + output_ids = [] + end_id = tokenizer.command_name_map['eop'].Id + with torch.no_grad(): + for step in range(out_max_length): + scores = model( + input_ids=input_ids, #GLMModel + position_ids=position_ids, + attention_mask=attention_mask)[ + "logits"] #[1,max_src_length,vocab_size] + logit_score = torch.log_softmax(scores[:, -1], + dim=-1) #[1,vocab_size] + logit_score[:, + tokenizer.CommandTokenIds( + exception=["eop", "gMASK"])] = -float('Inf') + + filtered_logits = list_processor(input_ids, logit_score) + prob = F.softmax(filtered_logits, dim=-1) + next_token = torch.multinomial(prob, num_samples=1) + if end_id == next_token.item(): + break + output_ids.append(next_token.item()) + input_ids = torch.cat((input_ids, next_token.long()), dim=1) + new_position_ids = torch.tensor([[[position_ids.size()[2]], [0]]], + device=device, + dtype=torch.long) + position_ids = torch.cat((position_ids, new_position_ids), + dim=2) #shape:[1,2,inputsize] + if not output_ids: + print("None") + return tokenizer.DecodeIds(output_ids) def glm_beamsearch(model, tokenizer, text, out_max_length, beam_size): # @@ -788,6 +796,92 @@ def t5_beam_search(model, return output_ids[output_scores.argmax()] +def glm_sample_sequence(model, tokenizer, context_tokens, context_length, + mems=None, end_tokens=None,out_seq_length=512,temperature=0.9, + top_k=40): + tokens = context_tokens.new_full((1, 1), tokenizer.get_command('sop').Id) + counter = 0 + if mems is None: + mems = [] + + last_beam_num = 1 + + while counter < out_seq_length: + position_ids = context_tokens.new_ones(last_beam_num, 2, 1) + position_ids[:, 0] = context_length + position_ids[:, 1] = counter + 1 + attention_mask = context_tokens.new_zeros([1], device=context_tokens.device, dtype=torch.long) + last_token = tokens[:, -1:] + output_ = model(last_token, position_ids, attention_mask,mems=mems, return_memory=True) + mems = output_['hidden_states'] + next_token_logits = output_['logits'] + next_token_logits = next_token_logits[:, -1] + next_token_logits /= temperature + indices_to_remove = next_token_logits < torch.topk(next_token_logits, top_k)[0][..., -1, None] + next_token_logits[indices_to_remove] = -float('Inf') + log_probs = F.softmax(next_token_logits, dim=-1) + prev = torch.multinomial(log_probs, num_samples=1)[0] + is_end = prev.item() in end_tokens + if is_end: + break + prev = prev.view(1, 1) + tokens = prev if tokens is None else torch.cat((tokens, prev), dim=1) + counter += 1 + return torch.cat((context_tokens, tokens), dim=1), mems + + + +def glm_generate_sample(model, tokenizer,text, top_k=40,seq_length=512,out_seq_length=512, + eod_token=50000,temperature=0.9, ): + device=torch.cuda.current_device() + model.eval() + + generation_mask = '[gMASK]' + if 'MASK]' not in text: + text += ' ' + generation_mask + context_tokens = tokenizer.EncodeAsIds(text) + context_tokens = [tokenizer.get_command('ENC').Id] + context_tokens + if not text.endswith('[gMASK]'): + context_tokens = context_tokens + [tokenizer.get_command('eos').Id] + context_length = len(context_tokens) + context_length_tensor = torch.cuda.LongTensor([context_length]) + context_length = context_length_tensor[0].item() + context_tokens_tensor = torch.cuda.LongTensor(context_tokens) + text = tokenizer.DecodeIds(context_tokens_tensor.tolist()) + + start_time = time.time() + mems = [] + tokens = context_tokens_tensor + tokens = tokens.view(1, -1).contiguous() + tokens = tokens.to(device) + attention_mask = torch.tensor([tokens.size(1)], device=device, dtype=torch.long) + position_ids = torch.arange(tokens.size(1), device=device, dtype=torch.long) + block_position_ids = torch.zeros(tokens.size(1), device=device, dtype=torch.long) + position_ids = torch.stack((position_ids, block_position_ids), dim=0) + position_ids = position_ids.unsqueeze(0) + mask_tokens = ['MASK', 'sMASK', 'gMASK'] + mask_tokens = [tokenizer.get_command(token).Id for token in mask_tokens] + end_tokens = [tokenizer.get_command('eop').Id, eod_token] + mask_positions = [] + for token in mask_tokens: + mask_positions += (context_tokens_tensor == token).nonzero(as_tuple=True)[0].tolist() + mask_positions.sort() + output_ = model(tokens, position_ids, attention_mask, return_memory=True) + mems=output_['hidden_states'] + for mask_position in mask_positions: + position = mask_position + tokens, mems = glm_sample_sequence(model, tokenizer, tokens, position, + mems=mems, end_tokens=end_tokens, + out_seq_length=out_seq_length,temperature=temperature, top_k=top_k) + output_tokens_list = tokens.view(-1).contiguous() + + decode_tokens = tokenizer.DecodeIds(output_tokens_list.tolist()) + + + return decode_tokens + + + def gpt_beam_search(model, token_ids, tokenizer, From 1e344a55a888cb20b3f1eed3285464d381f5e937 Mon Sep 17 00:00:00 2001 From: wangguojim <862876363@qq.com> Date: Sat, 21 May 2022 06:15:50 +0000 Subject: [PATCH 02/44] add glm blank fillin task --- examples/glm_blank_fillin/args1.pt | Bin 3540 -> 0 bytes .../glm_blank_fillin/glm_generate_samples2.py | 214 ------------------ 2 files changed, 214 deletions(-) delete mode 100644 examples/glm_blank_fillin/args1.pt delete mode 100755 examples/glm_blank_fillin/glm_generate_samples2.py diff --git a/examples/glm_blank_fillin/args1.pt b/examples/glm_blank_fillin/args1.pt deleted file mode 100644 index 6cde9856bb77f5a5242cd2d0c0cf5cae378eb75c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3540 zcmZu!zi%VQ6_)OJ7m+kck#{}^iHjgr44+PtFF6D$?7}uw2ow%T`oVB_NKQDrGntu{ z#0vsk00WkQfg5j%_>XYs!u3@Fk`(UTB~FR}36P{py5xJa%UzyqHrjdf>&^GR_r0g* zo!|U!uoHh_kK2Xe)`>E7&v+)B;fW|eF5mcd`K$5=VdyQ--CWyDSazw(>o77_z$kN( zvYD`+Od?NoiUp~Ne_|<;mNB{qJX2e_8%J z4C@oW?!yo+nZkdAcdupqk{Rt}^j>5$k)|?Vxad*uTqk^1d-(iC=%zv#CUZ$Ryq@uu zVC@Q)%5&-DObIqym#5FeATb5g#>)&ZwAe8ugV#1$GM@4bmd@N9KPj)maBd#I#hTk` zZL~D6g=G{iUax@k+6dPy;!0VO76{~Z=q=X{APOe|*R9Y~+BxPDu0(kT@R||3ka?;v z%IV*3hi)bjg}CN)H;md)Rko9N{#CPQBrc7xGJ^vw2Ybq}w=n+T@ehAAEkkd{JsuXL zdD;ozU09w{6D18J2XXP{as5bhCV?It z+zBJaXF@TTY3-ME!byd~&Q5qm=>=GTmFHZQr)lWBBFng4g95e;J7wrNI8#o)=!6Mk zA$-d)3G!cu`<1nYI^%8y`%uNS;_KRvvn`ABYeX^JRY*pTYudGzFxtwvTgqbeohM)Y z{q=Vb!rcpQv%+j)Ja8A1VpX368ajSX1exUGg3&iUL?oc<8cy}1C89@>8^mGr{OQ%b zFvxYaEwUY3`Wu6d(07yu)@N}YeO6gfuZxCi-F<9}L%`q=zqC*>amKK>F^-2_hrKy~ z@I_9v9|O-KgWKG5nvT2frP6sTXN4#6;t3KbMQHLQQDE+S?>%KQGx+S}8i!D>AO{!} za0OTQW*DxR%8;F1iVn`e;5u|k2AQ#X21Ng~$qeKH7%`Vh-JBZG6lK^ZN}E071vktg zL!hUk-qlcS^3vpH>x;+n7xwx2g4GU+eBqbn>FqFdOAXJQ_{Gh`_8s^OS%TWG|cMytxx?}fe>8J2KgSb_rGbq^a+OLUsas zLlFY>;A}*9LzJfWW~kJlB)2FMq-IoWk;C7rqfDU$X`y5cC@JZdu=FY=q+9|vJ-{K; zm{}Ngy>JliYHE-EM$J15ugW|YShCP9j^SKtGveTpzw~9e17BoThTVtAzsQJ{SmSe( z1Z5r9X6h{5aYmuqhP~sXqoaq%509aHKuYmv>!=hl(f5~J&2QL-l?+f_LvLc~Axdi} z*v}n$hU+jvV-wGAQjm1HPtm&2b`^`jt#Cimo60w3>% zEN%*ucTq-A41W6bXOuIsCkW%Yykv<+^~lpYm#)GHFNAy5m?8$%NjUVdsxNoqH^3_J z96yIpYa6RdZ;S54ypYVz!FnQm%AJ-7871on^7i}dkG?tzKMCEo-3^`C z((_5%k$h^=6^x5jn5ISSZ%4$^QL~PLdwWUJ6 zqnwAdOpp!&k=y!51_w;2O`w#bY^(p7KsQnw>U#+H`pCM&kL`Z!D{;nt+kn8wxm*C` zYC-IrHw$QhgsvA1+D(~}IHi*mDMw4uiERe1>_Kf*+6eO`U8A#>3B;{w+|hsty-|nh K(-+0;(f 0: - random.seed(seed) - np.random.seed(seed) - torch.manual_seed(seed) - - -# from model import GLMModel - - - -def setup_model(args): - """Setup model and optimizer.""" - # model = GLMModel.from_pretrain(model_name='glm_large_ch') - - from model import GLMModel - model = GLMModel(num_layers=args.num_layers, - vocab_size=args.vocab_size, - hidden_size=args.hidden_size, - num_attention_heads=args.num_attention_heads, - embedding_dropout_prob=args.hidden_dropout, - attention_dropout_prob=args.attention_dropout, - output_dropout_prob=args.hidden_dropout, - max_sequence_length=args.max_position_embeddings, - max_memory_length=args.mem_length, - checkpoint_activations=args.checkpoint_activations, - checkpoint_num_layers=args.checkpoint_num_layers, - parallel_output=False, - relative_encoding=False, - block_position_encoding=args.block_lm and not args.masked_lm, - output_predict=True, - spell_length=None, - spell_func='lstm', - attention_scale=1.0) - - - args.no_load_optim = True - - _ = load_checkpoint( - model, None, None, args) - model.cuda(torch.cuda.current_device()) - return model - - - -def glm_sample_sequence(model, tokenizer, context_tokens, context_length, - mems=None, end_tokens=None,out_seq_length=512,temperature=0.9, - top_k=40): - tokens = context_tokens.new_full((1, 1), tokenizer.get_command('sop').Id) - counter = 0 - if mems is None: - mems = [] - - last_beam_num = 1 - while counter < out_seq_length: - position_ids = context_tokens.new_ones(last_beam_num, 2, 1) - position_ids[:, 0] = context_length - position_ids[:, 1] = counter + 1 - attention_mask = context_tokens.new_zeros([1], device=context_tokens.device, dtype=torch.long) - last_token = tokens[:, -1:] - next_token_logits, *mems = model(last_token, position_ids, attention_mask, *mems) - next_token_logits = next_token_logits[:, -1] - next_token_logits /= temperature - indices_to_remove = next_token_logits < torch.topk(next_token_logits, top_k)[0][..., -1, None] - next_token_logits[indices_to_remove] = -float('Inf') - log_probs = F.softmax(next_token_logits, dim=-1) - prev = torch.multinomial(log_probs, num_samples=1)[0] - is_end = prev.item() in end_tokens - if is_end: - break - prev = prev.view(1, 1) - tokens = prev if tokens is None else torch.cat((tokens, prev), dim=1) - counter += 1 - return torch.cat((context_tokens, tokens), dim=1), mems - - - -def glm_generate_sample(model, tokenizer,text, top_k=40,seq_length=512,out_seq_length=512, - eod_token=50000,temperature=0.9, ): - device=torch.cuda.current_device() - model.eval() - generation_mask = '[gMASK]' - if 'MASK]' not in text: - text += ' ' + generation_mask - context_tokens = tokenizer.EncodeAsIds(text) - context_tokens = [tokenizer.get_command('ENC').Id] + context_tokens - if not text.endswith('[gMASK]'): - context_tokens = context_tokens + [tokenizer.get_command('eos').Id] - context_length = len(context_tokens) - context_length_tensor = torch.cuda.LongTensor([context_length]) - context_length = context_length_tensor[0].item() - context_tokens_tensor = torch.cuda.LongTensor(context_tokens) - text = tokenizer.DecodeIds(context_tokens_tensor.tolist()) - - start_time = time.time() - mems = [] - tokens = context_tokens_tensor - tokens = tokens.view(1, -1).contiguous() - tokens = tokens.to(device) - attention_mask = torch.tensor([tokens.size(1)], device=device, dtype=torch.long) - position_ids = torch.arange(tokens.size(1), device=device, dtype=torch.long) - block_position_ids = torch.zeros(tokens.size(1), device=device, dtype=torch.long) - position_ids = torch.stack((position_ids, block_position_ids), dim=0) - position_ids = position_ids.unsqueeze(0) - mask_tokens = ['MASK', 'sMASK', 'gMASK'] - mask_tokens = [tokenizer.get_command(token).Id for token in mask_tokens] - end_tokens = [tokenizer.get_command('eop').Id, eod_token] - mask_positions = [] - for token in mask_tokens: - mask_positions += (context_tokens_tensor == token).nonzero(as_tuple=True)[0].tolist() - mask_positions.sort() - _, *mems = model(tokens, position_ids, attention_mask, *mems) - for mask_position in mask_positions: - position = mask_position - tokens, mems = glm_sample_sequence(model, tokenizer, tokens, position, - mems=mems, end_tokens=end_tokens, - out_seq_length=out_seq_length,temperature=temperature, top_k=top_k) - output_tokens_list = tokens.view(-1).contiguous() - os.system('clear') - print("\nTaken time {:.2f}\n".format(time.time() - start_time), flush=True) - print("\nContext:", text, flush=True) - decode_tokens = tokenizer.DecodeIds(output_tokens_list.tolist()) - trim_decode_tokens = decode_tokens - print("\nGLM:", trim_decode_tokens, flush=True) - - -from argparse import ArgumentParser -from flagai.model.predictor.utils import glm_generate_sample -from flagai.model.predictor.predictor import Predictor -if __name__ == "__main__": - """Main training program.""" - print('Generate Samples') - # Arguments. - parser = ArgumentParser(description='PyTorch BERT Model') - args = parser.parse_args([]) - args.seed=1234 - args.num_layers=24 - args.vocab_size=50048 - args.hidden_size=1024 - args.num_attention_heads=16 - args.hidden_dropout=0.1 - args.attention_dropout=0.1 - args.hidden_dropout=0.1 - args.max_position_embeddings=1024 - args.mem_length = 511 - args.checkpoint_activations = False - args.checkpoint_num_layers = 1 - args.block_lm=True - args.masked_lm=False - args.load='/mnt/model_save/glm-large-ch-300M/186000/' - args.deepspeed=False - args.finetune=False - args.no_load_rng=False - - - # Random seeds for reproducability. - set_random_seed(443) - tokenizer = GLMLargeChTokenizer(vocab_path='./checkpoints/glm-large-ch/cog-pretrain.model', - add_block_symbols=True, - add_task_mask=True, - add_decoder_mask=False, - fix_command_token=False) - - - - # Model, optimizer, and learning rate. - model = setup_model(args) - predictor = Predictor(model, tokenizer) - # generate samples - text = '问题:吃什么东西养胃?回答:[gMASK]' - glm_generate_sample(model, tokenizer,text ) - - # text = '凯旋门位于意大利米兰市古城堡旁。1807年为纪念[MASK]而建,门高25米,顶上矗立两武士青铜古兵车铸像。' - # glm_generate_sample(model, tokenizer, text ) - # - # text = '工业互联网(Industrial Internet)是新一代信息通信技术与工业经济深度融合的新型基础设施、应用模式和工业生态,通过对人、机、物、系统等的全面连接,构建起覆盖全产业链、全价值链的全新制造和服务体系,为工业乃至产业数字化、网络化、智能化发展提供了实现途径,是第四次工业革命的重要基石。[sMASK]它以网络为基础、平台为中枢、数据为要素、安全为保障,既是工业数字化、网络化、智能化转型的基础设施,也是互联网、大数据、人工智能与实体经济深度融合的应用模式,同时也是一种新业态、新产业,将重塑企业形态、供应链和产业链。当前,工业互联网融合应用向国民经济重点行业广泛拓展,形成平台化设计、智能化制造、网络化协同、个性化定制、服务化延伸、数字化管理六大新模式,赋能、赋智、赋值作用不断显现,有力的促进了实体经济提质、增效、降本、绿色、安全发展。' - # glm_generate_sample(model, tokenizer, text) - - - From e410d04aceb097a6e911196b1a216a27b765c527 Mon Sep 17 00:00:00 2001 From: ZhaodongYan1 Date: Mon, 23 May 2022 09:13:07 +0800 Subject: [PATCH 03/44] changed ReadMe. Rewrite docs for Dataset, tokenizer, and GLM --- README.md | 20 ++-- doc_zh/TUTORIAL_4_DATASET.md | 171 +++++++++++++++++++++++-------- doc_zh/img/dataset_example_1.png | Bin 0 -> 15171 bytes doc_zh/img/dataset_example_2.png | Bin 0 -> 12636 bytes doc_zh/img/dataset_example_3.png | Bin 0 -> 15409 bytes doc_zh/img/dataset_example_4.png | Bin 0 -> 4031 bytes doc_zh/img/dataset_example_5.png | Bin 0 -> 14402 bytes doc_zh/img/dataset_pipeline.png | Bin 0 -> 129301 bytes docs/GLM.md | 35 +++++++ docs/TUTORIAL_1_BASICS.md | 18 ---- docs/TUTORIAL_3_TOKENIZER.md | 88 ++++++++-------- docs/img/glm_example_1.png | Bin 0 -> 18074 bytes docs/img/glm_example_2.png | Bin 0 -> 4409 bytes docs/img/glm_example_3.png | Bin 0 -> 7426 bytes docs/img/glm_example_4.png | Bin 0 -> 23081 bytes docs/img/glm_example_5.png | Bin 0 -> 22526 bytes docs/img/tokenizer_example_1.png | Bin 0 -> 15206 bytes 17 files changed, 216 insertions(+), 116 deletions(-) create mode 100644 doc_zh/img/dataset_example_1.png create mode 100644 doc_zh/img/dataset_example_2.png create mode 100644 doc_zh/img/dataset_example_3.png create mode 100644 doc_zh/img/dataset_example_4.png create mode 100644 doc_zh/img/dataset_example_5.png create mode 100644 doc_zh/img/dataset_pipeline.png create mode 100644 docs/GLM.md create mode 100644 docs/img/glm_example_1.png create mode 100644 docs/img/glm_example_2.png create mode 100644 docs/img/glm_example_3.png create mode 100644 docs/img/glm_example_4.png create mode 100644 docs/img/glm_example_5.png create mode 100644 docs/img/tokenizer_example_1.png diff --git a/README.md b/README.md index 520d8fb6..27cf60e6 100644 --- a/README.md +++ b/README.md @@ -8,13 +8,13 @@ FlagAI (Fast LArge-scale General AI models) is an fast, easy-to-use and extensible toolkit for large-scale model. Our goal is to support training, fine-tuning, and deployment of large-scale models on various downstream tasks with multi-modality. Currently, we are focusing on NLP models and tasks. In near futher, we will support for other modalities. -* Now it supports GLM, BERT, RoBERTa, GPT2, T5, and models from Huggingface Transformers. +* Now it supports **WuDao GLM** with a maximum of 10 billion parameters (see [GLM details](docs/GLM.md)). It also supports **BERT**, **RoBERTa**, **GPT2**, **T5**, and models from Huggingface Transformers. -* It provides APIs to quickly download and use those pre-trained models on a given text, fine-tune them on your own datasets, and then share them with the community on our model hub. +* It provides APIs to quickly download and use those pre-trained models on a given text, fine-tune them on widely-used datasets collected from [SuperGLUE](https://super.gluebenchmark.com/) and [CLUE](https://github.com/CLUEbenchmark/CLUE) benchmarks, and then share them with the community on our model hub. It also provides [prompt-learning]() toolkit for few shot tasks. * These models can be applied to (Chinese/English) Text, for tasks like text classification, information extraction, question answering, summarization, and text generation. -* FlagAI is backed by the three most popular data/model parallel libraries — PyTorch/Deepspeed/Megatron-LM — with seamless integration between them. Users can parallel their training/testing process with less than ten lines of code. +* FlagAI is backed by the three most popular data/model parallel libraries — [PyTorch](https://pytorch.org/)/[Deepspeed](https://www.deepspeed.ai/)/[Megatron-LM](https://github.com/NVIDIA/Megatron-LM) — with seamless integration between them. Users can parallel their training/testing process with less than ten lines of code. The code is partially based on [Transformers](https://github.com/huggingface/transformers) and [DeepSpeedExamples](https://github.com/microsoft/DeepSpeedExamples). @@ -132,8 +132,7 @@ language models, sequence labeling models, and text classification models. Let u ## Tutorials We provide a set of quick tutorials to get you started with the library: -* [Tutorial 1: Basics](docs/TUTORIAL_1_BASICS.md) -* [Tutorial 2: Project structure](docs/TUTORIAL_2_PROJECT_STRUCTURE.md) +* [Tutorial 1: Background: Transformers](docs/TUTORIAL_1_BASICS.md) * [Tutorial 3: Supported tokenizers](docs/TUTORIAL_3_TOKENIZER.md) * [Tutorial 4: Supported datasets](docs/TUTORIAL_4_DATASET.md) * [Tutorial 5: Supported models](https://model.baai.ac.cn/models) @@ -141,12 +140,11 @@ We provide a set of quick tutorials to get you started with the library: * [Tutorial 7: AutoLoader](docs/TUTORIAL_12_INSTRUCTIONS_FOR_AutoLoader.md) * [Tutorial 8: Predictor](docs/TUTORIAL_13_INSTRUCTIONS_FOR_PREDICTOR.md) -## Learn More About FlagAI -* [Datasets: supported datasets & PET integration.](docs/APPENDIX_TASK.md) -* [Setup enviroments for data/model parallel](docs/EnvironmentSetup.md) -* [Three types of generation](docs/Seq2seqMethod.md) -* [Using huggingface's t5-3b & tricks ](docs/Huggingface_t5.md) -* [Transform a model into Megatron-LM version](docs/ChangeToMegatron.md) +* [Use Prompt learning to improve performance on SuperGLUE](docs/APPENDIX_TASK.md) +* [Setup environment for training models with multi-machine](docs/EnvironmentSetup.md) +* [Text generation with encoder/decoder/encoder-decoder models](docs/Seq2seqMethod.md) +* [Training a huggingface t5-3b model with FlagAI on single V-100 ](docs/Huggingface_t5.md) +* [How to transform a customized model into a megatron-LM-style parallel model](docs/ChangeToMegatron.md) ## Contributing diff --git a/doc_zh/TUTORIAL_4_DATASET.md b/doc_zh/TUTORIAL_4_DATASET.md index 97b46276..737d008d 100644 --- a/doc_zh/TUTORIAL_4_DATASET.md +++ b/doc_zh/TUTORIAL_4_DATASET.md @@ -1,70 +1,151 @@ # Datasets -## 支持的下游数据集列表 +## 数据集处理流程 +构建数据集的过程就是NLP的数据预处理过程,其主要目的是将原始的散乱的文件数据重新整理成统一结构的数据,以便语言模型能够直接使用。构建数据集样例的主要流程如下所示(以CommitmentBank数据集为例): -| 数据集名称 | 数据集简称 | 语言 | 所属评测基准 | -|----------------------------------------------|----------|-----|----------| -| Broadcoverage Diagnostics | BoolQ | 英文 | SuperGLUE | -| CommitmentBank | CB | 英文 | SuperGLUE | -| Choice of Plausible Alternatives | COPA | 英文 | SuperGLUE | -| Multi-Sentence Reading Comprehension | MultiRC | 英文 | SuperGLUE | -| Recognizing Textual Entailment | RTE | 英文 | SuperGLUE | -| Words in Context | WiC | 英文 | SuperGLUE | -| The Winograd Schema Challenge | WSC | 英文 | SuperGLUE | -| Ant Financial Question Matching Corpus | AFQMC | 中文 | CLUE | -| Short Text Classificaiton for News | TNEWS | 中文 | CLUE | -| Reading Comprehension for Simplified Chinese | CMRC2018 | 中文 | CLUE | +
-## Load datasets - -Let's load a SuperGlue Dataset as following: -让我们用如下所示的方法来加载CLUE测评基准里的AFQMC任务 +## 数据集使用代码 ```python import torch.utils.data from flagai.data.dataset import SuperGlueDataset -from flagai.data.tokenizer import GLMLargeChTokenizer +from flagai.data.tokenizer import GLMLargeEnWordPieceTokenizer from tests.test_dataset_new_superglue import CollateArguments from flagai.data.dataset import ConstructSuperglueStrategy # 得到默认参数 cl_args = CollateArguments() -# 创建GLM中文的tokenizer -tokenizer = GLMLargeChTokenizer(add_block_symbols=True, add_task_mask=False, - add_decoder_mask=False, fix_command_token=True) - -# 建立AFQMC的数据集 -dataset = SuperGlueDataset(task_name='afqmc', data_dir='./datasets/', dataset_type='train', - tokenizer=tokenizer) +# 创建分词器 +tokenizer = GLMLargeEnWordPieceTokenizer() + +# 包含前三个步骤:自动下载数据文件,读取文件,整理成统一结构 +dataset = SuperGlueDataset(task_name='cb', + data_dir='./datasets/', + dataset_type='train', + tokenizer=tokenizer) -# 创建数据整理的函数 -collate_fn = ConstructSuperglueStrategy(cl_args, tokenizer, task_name="afqmc") +# 包含后两个步骤:为提示学习构建填空模式的输入文本, 词元化并构造模型输入样例 +collate_fn = ConstructSuperglueStrategy(cl_args, tokenizer, task_name="rte") # 创建加载器 loader = torch.utils.data.DataLoader(dataset, - batch_size=1, - shuffle=False, - num_workers=1, - drop_last=False, - pin_memory=False, - collate_fn=collate_fn) - -# 对加载器进行迭代 -it = iter(loader) -next(it) -batch = next(it) - -# 打印结果信息 -print(batch['input_ids'].tolist()) -print(tokenizer.DecodeIds(batch['input_ids'].tolist()[0])) -print(tokenizer.DecodeIds(batch['target_ids'].tolist()[0])) + batch_size=1, + shuffle=False, + num_workers=1, + drop_last=False, + pin_memory=False, + collate_fn=collate_fn) ``` -## 创建数据集 +## 加载数据文件 +FlagAI目前支持自动加载下列数据集: + +| 数据集名称 | 数据集简称 | 语言 | 所属评测基准 | +|----------------------------------------------|----------|------|----------| +| Broadcoverage Diagnostics | boolq | 英文 | SuperGLUE | +| CommitmentBank | cb | 英文 | SuperGLUE | +| Choice of Plausible Alternatives | copa | 英文 | SuperGLUE | +| Multi-Sentence Reading Comprehension | muiltirc | 英文 | SuperGLUE | +| Recognizing Textual Entailment | rte | 英文 | SuperGLUE | +| Words in Context | wic | 英文 | SuperGLUE | +| The Winograd Schema Challenge | wsc | 英文 | SuperGLUE | +| Ant Financial Question Matching Corpus | afqmc | 中文 | CLUE | +| Short Text Classificaiton for News | tnews | 中文 | CLUE | +| Reading Comprehension for Simplified Chinese | cmrc | 中文 | CLUE | + +只需将`SuperGlueDataset`里的`task_name`参数改成对应数据集的简称即可自动下载。数据集会被默认下载到根目录下的`/dataset`目录下,不过数据集保存目录可以通过更改`data_dir`参数来修改。 + +下载好的数据集目录下会包含三个文件,对应训练集数据,验证集数据,以及测试集数据, 以CommitmentBank数据集为例,目录下的`train.jsonl`对应训练集,`val.jsonl`对应验证集,`test.jsonl`对应测试集。一般来说训练集和测试集会包含标签信息,而测试集则没有。这些数据文件在接下来的流程中会分开处理。 + +## 读取文件 +不同的数据集可能会有不同的文件格式,以及不同的数据结构。以CommitmentBank数据集为例,下面是其中的一个样例 + +
+ +可以看到,其包含了四个部分,如下所示: + +| 键值 | 含义 | 值 | +|-----------|-------------------------------------------------------|--------------------------------| +| premise | 前提文本 | Mary is a high school student. | +| hypothesis | 假设文本 | Mary is a student | +| label | 代表前提和假设关系的标签
包含entailment,neutral和contradiction三种 | entailment | +| idx | 样例在数据集里的序号 | 10 | +目前所有FlagAI支持数据集的具体结构可以在[这里]()查看。 + +## 整理成统一的数据结构 +在这一步里,我们会统一不同数据集的数据结构,以方便接下来处理。此结构的细节如下: + +| 键值 | 含义 | 数据格式 | +|--------|-------------------------------------------------------|------| +| guid | a unique textual identifier | str | +| text_a | the sequence of text | str | +| text_b | an optional, second sequence of text | str | +| label | an optional label | str | +| logits | an optional list of per-class logits | list | +| meta | an optional dictionary to store arbitrary meta information | dict | +| ids | an optional numeric index | int | +需要注意的是如果因为数据结构太复杂,导致`text_a`和`text_b`无法塞下背景文本信息的话,可以把剩下的信息放在`meta`里 + +## 构建完型填空问题 +一个完形填空样式包含了背景文本,空位,以及在提供给空位的选项。模型需要找到正确的选项,并填进空位里。 + +对于每个不同的任务,我们都需要构建不同构造的完型填空问题来让模型回答,以CommitmentBank数据集为例, 其考量的是能否由前提推导出假设, 而有且仅有三种结果:contradiction/neutral/entailment。那么我们可以构建如下的完型填空问题, 其中contradiction/neutral/entailment分别对应true/false/neither + +
+ +可以看到,大体上可以分成两步:第一步是组合已有的文本,使其看上去符合完形填空格式;第二步是将原始的标签文本转化为新的标签,作为可能会填入空位的选项。 + +## 词元化并构造输入样例 + +接下来,我们需要构造模型的输入,第一步是词元化这些文本,而接下来则需要分成两种情况: + +第一种情况下,数据集包含的标签类别是有限的,比如CommitmentBank数据集里只会存在entailment/contradiction/neutral三种标签文本,这种情况我们称为单词(single-token),常见于分类任务。第二类情况里每一段完型填空都会给出不同的选项(一般是一段长文本)。比如在一些阅读理解数据集里,每一个选项都是一段对于文本的理解,这种情况我们称为多词(multi-token)。这两类情况的处理方法如下所示: + +### 1. 单词(single-token) + +| 键值 | 维度 | 含义 | 构造方法 | +|---------------------------------------------|--------------------------------------|------------|-----------------------------------------------| +| input_ids | torch.Size([seq_length1]) | 输入矩阵 | 由上一步的完形填空文本,加上一些特殊字符2组成 | +| labels | labels: torch.Size([1]) | 标签 | 对应的数字标签,比如0,1,2... | +| position_ids | torch.Size([2, seq_length]) | 位置编码 | 参考[GLM流程](),第一行代表token的绝对位置,第二行代表遮挡部分的相对位置 | +| attention_mask | torch.Size([1]) | 分隔符位置 | | +| target_ids | torch.Size([num_labels3]) | 全量标签列表 | 将所有标签文本分别对应单token的标签,然后将这些标签的序号依次放入target_ids | +| logit_mask | torch.Size([seq_length]) | 对应的文本是否为回答 | 对于每个token, 如果是回答,则对应的地方为1,否则为0 | + + +1: seq_length代表规定的每个输入向量的最大长度 + +2: 特殊字符添加流程:在句首添加[CLS]符号,句尾添加[EOS]符号,直到长度达到seq_length, 如果完形填空输出的文本有两段,则在中间添加[SEP]符号 +
+ +3: num_labels代表完形填空问题中选项的个数 + +### 2. 多词(multi-token) + +| 键值 | 维度 | 含义 | 区别 | +|---------------------------------------------|-----------------------------------------|------------|----------------------------------------------------| +| input_ids | torch.Size([num_labels, seq_length]) | 输入矩阵 | 将对应的文本拷贝num_labels份 | +| labels | labels: torch.Size([1]) | 标签 | | +| position_ids | torch.Size([num_labels, 2, seq_length]) | 位置编码 | 将原本的位置编码拷贝num_labels份 | +| attention_mask | torch.Size([num_labels]) | 分隔符位置 | 拷贝num_labels份 | +| target_ids | torch.Size([num_labels, seq_length]) | 每个选项信息 | 矩阵的每一列代表每一个选项,每一行代表当前选项对应的文本 | +| logit_mask | torch.Size([num_labels, seq_length]) | 对应的文本是否为回答 | 拷贝num_labels份 | + + +## 创建加载器 +最后将数据放入PyTorch加载器即可。 + + +## 自定义数据集 +对于每一份新的数据集,如果想用prompt-learning的话,一般来说都需要重新构建一份processor和pvp文件,方法如下: + + +1. 在`flagai/data/dataset/superglue/control.py`文件中, 如下所示创建自定义的processor和pvp函数, 然后把他们与自定义dataset的名字的映射关系添加到control.py里的PROCESSOR_DICT和PVPS两个字典里. -在flagai/data/dataset/superglue/control.py文件里, 如下所示创建自定义的processor和pvp函数, 然后把他们与自定义dataset的名字的映射关系添加到control.py里的PROCESSOR_DICT和PVPS两个字典里. +2. 参考如下的示例,构建新的Processor以及PVP函数。 ```python class ExampleProcessor(DataProcessor): diff --git a/doc_zh/img/dataset_example_1.png b/doc_zh/img/dataset_example_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e53e414db13cfa3033377ce5c25849c7be7dc627 GIT binary patch literal 15171 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 literal 0 HcmV?d00001 diff --git a/doc_zh/img/dataset_example_2.png b/doc_zh/img/dataset_example_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2130f4b7b48c0bc2e6ff0072b42f78918c51d229 GIT binary patch literal 12636 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 YORl3;VlfVQYXVJHO8!mhYr}y50b{v}bpQYW literal 0 HcmV?d00001 diff --git a/doc_zh/img/dataset_example_3.png b/doc_zh/img/dataset_example_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8dd35015994a38a137de8402e945d57ce1c253f1 GIT binary patch literal 15409 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≦(|d>TmZq#8-}&^_%sRe9MKQmd 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 literal 0 HcmV?d00001 diff --git a/doc_zh/img/dataset_pipeline.png b/doc_zh/img/dataset_pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..d18a51fde0f55df4b33f6287442aec8d096dfe36 GIT binary patch literal 129301 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

p>bU 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

~z(gBSkhi(mwwUezRRt9^HN{A>R!nY$B& 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 XO~tpgIY^)60LH&8?9SDidnNuGwam9+ literal 0 HcmV?d00001 diff --git a/docs/GLM.md b/docs/GLM.md new file mode 100644 index 00000000..b76ac198 --- /dev/null +++ b/docs/GLM.md @@ -0,0 +1,35 @@ +# GLM + +## Model Description +Currently, there exist several different pre-training model architectures: autoencoding models that only implement encoder architecture (e.g., BERT), +autoregressive models that only implement decoder (e.g., GPT), and encoder-decoder models that implement both encoder and decoder (e.g., T5). + +The **GLM model** was proposed in [All NLP Tasks Are Generation Tasks: A General Pretraining Framework](https://arxiv.org/abs/2103.10360). +It claims to perform well in the three main categories of NLP taks: classification, unconditional generation, and conditional generation tasks. +

+The key features of GLM include: + +- First task: Several spans of the text are masked following the idea of autoencoding. Those spans will be randomly rearranged and be predicted in an autoregressive manner. The masked spans covers 15% original tokens. +- Second task: Similar to the first task, but the span covers 50%-100% original tokens. +- Other model architecture changes compared with BERT + - [Pre-LN](http://proceedings.mlr.press/v119/xiong20b.html) + - 2D positional encoding: Each token has two positional encodings: the global position in the sentence, and the local position inside the masked span. + - Feed-forward network is replaced with a linear layer + +## Supported pre-trained GLM models +see [Tutorial 5: Supported models](https://model.baai.ac.cn/models) + +## Step-by-step procedure of GLM +1) Following the example in the paper, the original text contains 6 tokens, and two spans are masked: first span contains the 3rd token and the second span contains the 5th and 6th token. + +
+ +2) The input is divided into 2 parts, part A (corrupted text) and part B (masked spans). Note that the order of spans is shuffled here. +3) +
+ +3) Input and output of GLM, the input contains token embeddings and 2 sets of positional encodings: the first set is the positions of each token, where the tokens in each masked span share the same position ID. The second set records the relative positions inside the masked span. +
+ +4) The self-attention mask that realizes both autoencoding upon corrupted text and autoregressive upon the masked spans +
\ No newline at end of file diff --git a/docs/TUTORIAL_1_BASICS.md b/docs/TUTORIAL_1_BASICS.md index 18e5e613..380d30fd 100644 --- a/docs/TUTORIAL_1_BASICS.md +++ b/docs/TUTORIAL_1_BASICS.md @@ -24,23 +24,5 @@ N encoders and decoders will be stacked together to form a transformer, where N Step-by-step details of transformers can be viewed in [this article](https://towardsdatascience.com/illustrated-guide-to-transformers-step-by-step-explanation-f74876522bc0). -## Transformer Applications - -Currently, there exist several different pre-training model architectures: autoencoding models that only implement encoder architecture (e.g., BERT), -autoregressive models that only implement decoder (e.g., GPT), and encoder-decoder models that implement both encoder and decoder (e.g., T5). - -The **GLM model**, proposed in [All NLP Tasks Are Generation Tasks: A General Pretraining Framework](https://arxiv.org/abs/2103.10360), -claims to have good performance in classification, unconditional generation, and conditional generation tasks with the use of a new pre-training method. - -The key features of GLM include: - -- First task: Several spans of the text are masked following the idea of autoencoding. Those spans will be randomly rearranged and be predicted in an autoregressive manner. The masked spans covers 15% original tokens. -- Second task: Similar to the first task, but the span covers 50%-100% original tokens. -- Other model architecture changes compared with BERT - - [Pre-LN](http://proceedings.mlr.press/v119/xiong20b.html) - - 2D positional encoding: Each token has two positional encodings: the global position in the sentence, and the local position inside the masked span. - - Feed-forward network is replaced with a linear layer - -An example showing the autoencoding and autoregressive of GLM can be viewed [here](APPENDIX_GLM_IO.md). diff --git a/docs/TUTORIAL_3_TOKENIZER.md b/docs/TUTORIAL_3_TOKENIZER.md index 88664db1..db46e64d 100644 --- a/docs/TUTORIAL_3_TOKENIZER.md +++ b/docs/TUTORIAL_3_TOKENIZER.md @@ -1,51 +1,56 @@ # Tokenizer -## Supported tokenizers -| Tokenizer | Language | Related model (see [ModelHub](https://model.baai.ac.cn/models)) | -|------------------------------|----------|-----------------------------------------------------------------| -| GLMLargeEnWordPieceTokenizer | English | GLM-large-en | -| GLMLargeChTokenizer | Chinese | GLM-large-ch | -| GLM10bENBPETokenizer | English | glm_10b_en | -| T5BPETokenizer | Chinese | t5_base | -| ROBERTATokenizer | Chinese | RoBERT-base-ch | -| BertWordPieceTokenizer | Chinese | | - -## Introduction - -Natural language is usually expressed in the form of sequential symbols, -where we call each of those symbols a **character**. - -In any text, each semantic unit is composed of several consecutive characters, -and we call each semantic unit a **token**. For example, 'cat', which refers to a -kind of small domesticated mammal, is expressed as 'c', 'a' and 't'. The process -of splitting texts into a sequence of tokens is defined as **tokenization**, -and an example is shown below: - - -Original sentence: Jack is walking a dog. - -Tokenized sentence: [Jack, is, walking, a, dog, .] - -It is noticeable that token is not equivalent to word. It can also be character, sub-word, sentence piece and so on as long as it holds appropriate amount of semantic information. - -Another critical preprocessing step is vectorization, which turns the raw symbolic sequences into a numeric vector or matrix so that it can be directly fed into our language model. Usually there is achieved by using a vocabulary file to map each token to its corresponding id. - -In our project, there are a bunch of tokenizer classes, where each of them can tokenize and vectorize raw texts in different ways, and there are also other important functions. - -## Loading tokenizer -Load an existing tokenizer: +## What is Tokenization? +**Tokenization** is a fundamental step in the preprocessing stage of NLP projects, +and its purpose is to convert unstructured symbolic texts into numeric matrices, +which are suitable for machine learning systems. + +In the tokenization process, a **tokenizer** is used to split natural language text +into a sequence of semantic units called **tokens**, which are then converted into +ids by looking up the tokens in a vocabulary file. An example of tokenizing +input text `Jack is walking a dog.` is shown below: +
+It is noticeable that different tokenizers can have different ways to split text, +and have different vocabulary files. Our projects currently support six tokenizers +as listed below: + +| Tokenizer | Language | +|------------------------------|----------| +| GLMLargeEnWordPieceTokenizer | English | +| GLMLargeChTokenizer | Chinese | +| GLM10bENBPETokenizer | English | +| T5BPETokenizer | Chinese | +| ROBERTATokenizer | Chinese | +| BertWordPieceTokenizer | Chinese | + +Details about their variations can be viewed +[here](https://github.com/BAAI-WuDao/Sailing/blob/old_main/docs/tokenization/tokenization.md). + + +## Loading a tokenizer ```python from flagai.data.tokenizer import GLMLargeEnWordPieceTokenizer -tokenizer = GLMLargeEnWordPieceTokenizer() + +tokenizer = GLMLargeEnWordPieceTokenizer() # Load tokenizer ``` +At this step, the vocab files from Modelhub will be automatically downloaded to the path specified in `cache_dir` parameter. It is set to `./vocab` directory under the tokenizer file in default. -## Creating tokenizer -To create a new tokenizer, you need to: +## Applying a tokenizer +The tokenizer can be used to encode text to a list of token IDs, as well as decoding the token IDs to the original text. +```python +text = "Jack is walking a dog." # Input text +encoded_ids = tokenizer.EncodeAsIds(text) # Convert text string to a list of token ids +# Now encoded_ids = [2990, 2003, 3788, 1037, 3899, 1012] +recoverd_text = tokenizer.DecodeIds(encoded_ids) # Recover text string +# recovered_text should be the same as text +``` +## Creating your own tokenizer +Different tokenizers has different vocabulary and different ways to split text. To suit your project, sometimes it is significant to create a new tokenizer, and how to implement that is given below: ### 1. Create a package under `/flagai/tokenizer` -### 2. create a python file to define the tokenizer +### 2. Wrap the tokenizer from huggingface -Initialize the tokenizer as below (let's take T5 tokenizer as an example) +let's take T5 tokenizer as an example ```python from transformers import T5Tokenizer @@ -56,10 +61,9 @@ class T5BPETokenizer(Tokenizer): cache_dir=cache_dir) self.text_tokenizer.max_len = int(1e12) ``` -If tokenizer model imported from transformers is used as the text tokenizer, it is all done! - -Otherwise, you need to implement the following class functions by your own. +### 3. Define Tokenizer APIs (without huggingface) +If huggingface tokenizers are not used, you need to implement the following class functions by your own. ```python def EncodeAsIds(self, text: str, process_fn=None): diff --git a/docs/img/glm_example_1.png b/docs/img/glm_example_1.png new file mode 100644 index 0000000000000000000000000000000000000000..7e8c4adf057d7d0fe15f7138fc2ded2f733742f8 GIT binary patch literal 18074 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
XLNR_SIR7{`7j%co>c5$TumxOl2~s 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 literal 0 HcmV?d00001 diff --git a/docs/img/glm_example_2.png b/docs/img/glm_example_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0a66052d7a38915ea0bea35d6f2bae790da90d2b GIT binary patch literal 4409 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 literal 0 HcmV?d00001 diff --git a/docs/img/glm_example_3.png b/docs/img/glm_example_3.png new file mode 100644 index 0000000000000000000000000000000000000000..92edb4ee17d03d82dcaae932d7c4617a35a085ef GIT binary patch literal 7426 zcmeI1XEdB$yT?88NQfXoB1%XiL^shH3`r!)ATfH)=)E(#hY-;_qlYlM(HS)vy^CIF z^xh4^D2MmF>#XOq7PC(ga|XGxXEOstXU=!{Pj|w zj!@nf4-tG?Ew~<=8k^m9%F=<52y*f{!lNX8qf%pWGpJKB;J2S2m ziV`7)5DTNAddh|O+cVZ0KLwg<1YXa0l`Bl_$`9J?mh(z<{pR#l)lWnhgNkm zPn04SE%<*Gk$WhFR@mNuF~o;Oy>ngj9~W9d5MdASS|}!uE^;g-@3ImjK#8#$~eDCppe{1XXWC3q&gwp57sZPBnk$^7iZ*o5?U$^8PUb`cUd^=V53T zoYGX#a#02Bn3)nT-R(md;0;8eia#w3>^FlVNQ8ZRTAXnK3ksP*88lpJ$;rnP$RG;p z7W+q=!6Gsmih%rD|2hV*6X-4cDA%QdSg8ha_y zi(}3lXzgv$=qg0(b9ZM5TjHKd%et55$u&KM(mg~x+k{;_bHNQtzD9nm&T1c|p{OdG z4>Y?HSit-5HLi;u+5FO3#3jpfd^-O}DfHwEt`kbPcZd z8HuXs6g!G9);cV|!f9{!D>q>dk5eEtQ!B-sZXQ#04O7S^{AQs;q>#SWZM4A28`w_V zy#FVUIvk%n)brE*L2Xt0Gyi_5<;;NkGw_ofvWHZ*o1FK$wH_XZZd5vb8P!_3A`lJ8 z|60=(9nXOYGafIrhjk==W5vH2^8(jsG8R4fq4AOqZ@w6xLya)ld3@v*>m3u98@r`w83;cKlYrIeTo&<->k3)Kcij(NjPd#&{Y@_`ey2T=D{vEy zT^%xvo?clJ^3rp^+*lb;ed^3|VlS z9Yrm4N*h8qY+Q|5bh=YgQHUSWVbx;1J+N2zDiumXn;bj3sh^!<{J&;}RL*~DuPuX} z<1}FB0&=yJ+Iu9E^K}JYmBlPFS|{8d!fwAdE*tFIGVCaQd<=dD;g>uM%p1z@1?Age zq0_V80s0g+55M!TT_(@Qk`9Cv4|0RQt6f?%I~(+R?l4LNOyb;^QdEyq(75x_teN1( zrH&bG-CA3yVqvA3G8qKfp+-xmcob_`oq!U5uo}Xc*kW6QKanjHn?46lb6SxNuH4L*-=ixU zjGHWB=?fot?kWG&jr{|yx^GUXkxyt#SChZCIOt;a>3*rfjObmL>$=YaY>?LCNuu)A zbCo93Q&qe~1G)Do5g{2it+s74PQLgb-olTcgWnjaMw2Sd=B_qtJ`zXmutVvZdX-6A zlR$FxV=1vQV6Ei^2H()>vLDo>S0T;mcY->zlG+6_N@v zY=mnhL__Js5A+fK=n6>(_w~)#79zVSz;>_M^jfln!)5tdbqHVKM>NiB`Z#O-0qmVF zyO+COhb|Kya8#G(S|=c%Dj7mo6^9n!2%JtGTl%s2oJy#cWgb8VmXP5IiW!=zwaUKU zXIc0|v<8Bl@n9=dO@olCyUodm?FCt%js2gny?8Zh$*O3~K@kM*x^K>cwBeS$iujbQ zxfN0InWLSvXAR(DaGxeMqMHpbUfLkg@yOv;9t6&MHd)7u)UiH=Sj;^Qr$%hY5BWpZ z`@asq&*d%I(ClgB2Y;92(+SW@kmps5N1z1_b*%GQtiIGWn(6}BP+({s z4v{;aInOL|$ zY3mwoGD)BYZvI@>gZG53K;|=W@~U<4lvb)*XjuWs6`7CVn%MJC375wSLUV9Cj;u-}o%#CWkN>33z~ z?{+q}pVAuslK%=|Hc66SY64>JTkFU?x;y+M@=fT=w&&ho?s>XxRQQodT(M%CS^}F- zdoY7fky~cjsB;nLRkXkuGTfXR;b%g4_hovf1zSsTbe5hWF(FLq6uH%oad0w_e(csk z7@31GG2W_W!}bvi2^wSgr8p{OFY&0)+Lx+92__Z|0GEb}BMLtqmso!iL0g&hbKyIx z0xL=R9F~(-dgQ}yAm``I@EARc;X%NfaA1CIlbVC9fH>L1lPxu-YxpL&)JkY49p2om z;Q+VP^uFh24-d?pqO1MR-j?bq0x;Zg0fruMFYHEsHH&7fnI6VqhKw_~N{TX!t)eot zzVzF)DPmaPV5d=_@Sr#E&MrHn&#ULrLy(V`)i0= zByDijHB`USIE(%Uw|dbmA|3>tmHtP=p zDWdxb0)lV1{#&l>U;8@hmn$Wm5^L(wsFMcf1+yPu`F62!UOo8RWUG>UY}lXZIQq(% z%pE>IQ!3!HA|E9&#CA~rOI^>O$%WLO&{HHChe{duq3I9;Iso)S`s?M^XqP)UJwV# zum1As?ca=wsGQeWs=>Bxuuu508{O8U^}H{d42iD?s%z8gt$(gUxQ}luFDZC1{?qb1 zTtieYPYPVQ%hc0o~$!0dJcNMTpwP9|9+`H$t@ap>Q6;0?A#;4Cjfy#*U09Ok9Dr#O0dk&ty;g<<0 zo#fnC$T}lQ@lrtXNvdw6ew9` zb~bb!mcHSkbW;h|F4bK%M^DXJUYgFfb+=h@P*es}=tT4}O78s(oE#n#DfBYfnLJxk z{u8>E)uOhfb`OUNRWHW4NuROSS`N^s8~Qj*HH@~Uj~V3(MKZDBl)8K_INalJW`@vQ z7_Nd2Ou5*~SG03A<>e!4#(eAzm;Dnf4ntQ>O}W`5Vc@1_kM0!X7pf%xi1#vmMDDue z^|L!z=C%x{%e3uBkeDceNz7WgvOGx>8}WtHN46Vp^_AAV;#S7KJBBnqTX8=e%wXErN6aKGN2rm;DragW!&`S7~?i1{8b3+JIt3r#yEc|Mc)P^WWl+m2h1rLUHI-fv_6 zW(`=`U2<-$0c-%Qle`t%cEVzWARZ>S8nEq}a;+1>l{TTy2jtK{!k)xOvr`@9Idu)% zkCVLK^^5HFss{#t&uJQVpVYx@n78F#?fF(5EBGG0F7#6V<)N(CA6pX%*JuLSfAQ)2 znBczpjV2^{x!y(lTEFs|yG`gV8BZhwh2*)%YWWC#p!B-VCGxmvcP*3hkoSwC?nmDj zwN*z_>+PUOpQkowL+r6TS8a{_iE;XCJ933L@}CE=P<=>bNO<;ZF*n@R$0%Qp=0l(qe^Hj=F2b-=ICv`VnOAq7OAX?mIbl6sYbvE}@+Qe7%P6D1Nd}S2c=S z5?c^^pW{~E`ox#zH%|)v5zzNwpDuHE;mp1HJfl9rnlwGr0Anb4K>(ei z9Z1!BWi*Z9pEr}NF?m6P?d$Z#a$<)wisO+Iamh8?gcgvVl%96nt^{8p^Vj<9o1~)w zM?nc`JmE2jUpdBcQ8!NG%`;gg`ufL+GQhG}S--$Donz|oQ$K*0>$X}s`!^7nsZ#w3 z%K$w#8M4W=#u?TLd~`UMQ{2pZ_Mx%D`ns4K2&U2AvmC(OPwwknt8MTL1{WH;o?P`! zc~lt=jBea&_ivl2GQ{mBeZ6jE!FKnC&0~7U4DrI;Q;|%FgZbVc2|R%otw|Ph4VAS< zY3pa{K9=&FsKPTP-i$#Fs5a|;L{B$Nb-S}mhtKI~1s%IE$4;n&of5PCE9#)PzAy9H zh-}XMh)xE`W4-uu%BoIcZ*}A8K%w`u8{kt6yZ?M8iiSoI;ruC>fO`ADeHY>rT)D7uD`JJo| z-YvHV1KeL0xX$k&@GisePJWi46L)Pauo0j1s|I8pn%?pX(d2|Q#f35gY`m?e{TnKV z-Z+S;$=0prYiR*D$*c5$Yr4V?c^29-urHslyL-Nl$H_|MiLZqs7L&wzG9YY9UcaA^ zTNI?-iFkW+Jm)<`^zj7s8OjT3S(9sAxJdAmE!vdk$U}6T0hxECIZ?xBJa)YD&4(pn z4|AJvt3A^1R|bgYVbv5EitP`2^_J=uMtW<|*_@Lals`Y-Cz8Qy-V9v|HgjvA5vf*B z)4W>KYw2YvF}mapR_@`yO(Kja;U?o27jYOxiQpCA?^(^oitmGtJ4apm2YU$3$}ie^ zLDR1>sMwoMSaYs?X>^fw2i)kXVS;oMc08{%*=>*KFJFnc+K##erJ&C8DsO+Izv&1g z#Mcg`!RTQ1On(J-zsVQ0GM0X;c&XoGVPoD*B>+R1q3g5Jb7tkDu-f>EaaLHoRMRPw z&rEH3dS6*QvL5T!>YF4~b3i_G8 z3i3k_igm{Ox!o#8hP4+ZQ~7xhPsyeeiu8{cO6p+Q@#k3`AfUKY*gDC+F7NNK#|Xk+ zJCP;3!e+spZkmen)kJIkT1Pd%&4c|PbVH)FW9Vg>Q!OGO=A6q>RzSd19_?&CZZ-{< zs$hSGwC=v=Wf9(U611M^y4irk;q5M$d)kj}J|8_dW>|f* z`!S#N_BV=B)21Ui_1iK;;}-`)FpI?>7YRr>t~2;bkJ$HFd;1PBTgQmVWXVgr3khTr z+xJLCvA&WYJtulZ_?lCTUPsS2gKzc>IS9|+t>7Muu9>N@Uo`VlPiY^9IV>6uE3+11 zXE`LTf%pyn8VVoFL&kNehViXF*1jVAoJ7xF(`Uv>6%UT{CDcQsizD~VFqO7mHT7$v zeem+efcY*Wx7`bh{ea0Ty{I5UW`urC1sj&{m3^%F^&Q&Gjzhh~lbV+-isga=J(#D? zww$&HLZSz*wF@%P4&}WZaCrvF?r51g$i8xu-ndZlGfXN6ZgYgQPGG8xsVc`f9jI+q zmaPvc>l~w*DK35dkH|b>iT7#S^E~A`BvBp%7~9#Hn}(FE1v}VoW+DCD9v>I@PBrJ% z*wraE5o_NCQ*e@wIx=>DSo zu-kP13!C&5mKIpM$e?!Ta@@8WsQYSxj~Wqu+VlAD@F@4DQ7x$Zk+C+bq-heL=Oq7d zZWx0QAGcG_*qq{pp4xSFq+6&T)Bh7|2Cxg8v%Hx#xh}2i&BnctnE4ie&n59%0Tb-k y%P9qS{QQq3cnjK1_U{4y^)>jP8cx5fJ3gpPDsU3P;PtOW0y!C_w*sRs-3@n|e6$~EWtHTBQWzYao% zR@5}m1usrdi1Ds4(~(daGX|5qAT;wew^$^fU!?YVm*xyWon%u`v3W9($Ds9+D# z4^kiU&}e>vU}Kqlak(R3s7AVxKSlhp?k5hE80+4hTn2L8K&My0PK#H4FQ|;ov1Dmk z=e`Vc#VcHLiYVyv7GMGHV6|aw;01uP7)Mph=tiC1;cC-ik>kA*WvwJc#(={HViLl+ zT47jUp2^l@XK6kSKGv`as?>jv4Z_0;z#b*JS0pc`dT9&?w_tkaUtHG1~t zk5&orTS2cc#I7M4g{rBIAkN@p%A%30&%b@HYMSlmy#_jTlh1Qa`uwkmy3v_DD6c&0 z^#3lZalA({weQo9#w=Cb0)Wvq&1va^_PViSV>hufd~BA@01FO|{cyTf$7S}Kmek0j z{0-I5?oIg^NsiF7G?y7qJ2T~<->}ToY#bnt^3jEbwah6uJ=?g&=LUz;gG(^aWu^Qr zWI7Y7Vi)lqA0y*zrcu!l*|t8Iyo4ED@9 z>{^JHHR9sfKvAm-4yI2$!;2Qaz384jphwe=Stf>1B=Mpu$-z{nWGR< zXb&PX7Akw=NyBrkBC_>U|^73~agU35O z+!WiAF0~@d&EtWHPQ6nddmpt#lwjv_kvv6M(X5%I4yd#Sabl@mWbkhG&k!y_7@*_#8>cR=_3C+s?(RQ6 zS#9Xxsz#q_6iXm49G!k&lJ@Crh?sm+#a*&} z&?P^bFSWF0gvRfGf!Howo$U9KbzkfblV(DimI`llMI$c`Dr@FZO7)vI-Cjh31!w#4 zB*_NSH8j~=1kA2XSb^cX$UEz%wOB>)X5KAW1cS99_j9Wqg3w2ag2^lw)%4a#1R!$H zUU+xmVP#StLjZqm;T-YNa5Zl^A9`#nGLUlVh@topo`kbLhY?j&Oj-G>b_E0Ld}}M@xAqd5-_%+MU-y8>L>Hga-g+9n=%X9p+(@P8xA|fI z4%>^9K$4HmspDB;BSqY!`+?5L7Qb7eM0OMAUwoZxd1`+##R(j0`dMGR&BJYN<7y~n zQPk)#7g`M`(PW>nZw8mwu%*#JyclaR-OuONK3X zt!<-Qot*lrBZufto5vWM!(r93McY1jM<0EcmGNb0JW=fy$c8J~EdtdYRPokU$qAjr zw^IxPX_sHkwS2o%Dyci~dA_HSxYyvBpiNb9uLowB)3lv#nIf`X>oDEKe=9U>DUj7K zBX1VqaDDqH&oZln96{GM4DCe*3}Io`m$P`LDo1@U3m0y-sw6XY2ZZx(zSW=Rn3+5f zbnD)5oR!_u+ez1RBBXvhL7>$T{5Hc&&=)z+CQnnpvr<9OAN>UFDW_uQ@46m0-xa&f zDUNCvwUUwrkh$t#E}3a@+=NcjWH_lT5vD>)nk7_4qZq8D&kq(;(mcYM8565_*Pn@2 zZz(9uXQP9gf?VdLukuqMowypiuhVY2;JXYT1KBY9xaU_~Q?~(K^^Ts#N=gUr-;Eqi zC5Bo>i+G{y7ifxo`<&Jy@(z;4k7(??cSC1K3z$njTdujm-!=$&cQr1H$}3DNKYK_# z*z7Do4b&|2mNQ>|SuM#TT;j{UhCuRhU(ap2-E21dh8QDz`S$9N-X?lS6*t*^-WNFH zx;(c#yVJ2xJN-a^?fbsv6to|47P^7^f*r7$C?sq^`^mFrX#|m{oJi9T{xpQWa7IQa z;W@S6f$nt{b<2z?Ce*oWVeUx0>&0II{k@8yz13%|T&b%L9c4YpB05NN5Qs~~u8f=G zx!*q4wdQU&He%u_jzE1Se@M~^+GV!#@`NqHQR%)x1F+wn`(CM|;Qlu{bI)Eu300m} zIcW`rLRz@pPa>@T!QEHLMbX++_mCe%NB-G9Z>>S%Qwi(w2g#CT4fF?%5b5PMc_tXt zyL#amRuJ!-@;(n{@Ej+kq{PM`<~+{G7GeFFchO#iqH6}sS$?=7XnFGD7w~>0LGVAo z!~)Lgb8Zzm4d$L1^zRs# z3i20!RGrc?6Am>NzrvRE5C-zHTrY4^d~GJR*7pMmw;V78XtpB;l)J3t9O zvCDoNH;Y`nBXLQ8&t=)mE_>qiZ4Wn(#qw+wJ}T-f5ub@-X|$n=;*Os(G^VADCNpWh zzrJl|^D_e6fxaG~s^bvqLRjdBEE;8IA|7~guGIF_X7Fl{10Rla^wK5fBrg83T zKW~I+l48y*EF8H{M9+<}0RW=^xnIBM9N*B&OAWa;6t|iVYonb_A`Zqk$DWjEVhq>k z)(&LttcoCficBFJj~L&q+4ldzgq;45b^HII;jI`wbK{dj;v`Puh~6Y{dPtJ>z2nv+ z*nhSl@Qp|~wB7Rb8xd9De;N5!5#L_c$K%*7G^Zyg_g(`G;&%fS!CqnJEGC?vIb*eP9 zutD0{L$jy*nY3qhI5|~Bfk6U+FCN^(sH&`B$EulCZ05Pk*R1UbIc}h$^-bOVOu)00 zdbL?K>hHNBICn9?V&&iAO{{Vlm&W^SJdOX=O1IS}kU!QLS5cBCi~)ud|KQyhjHiQT zE9P}-6G~LQ`QW;pH{LEE7XpFAc1*F4Mphcbiw$Bsv~wAL4Pqc|wzrnjOqDfv=9eD= zH#HP>GaC66@Af%ldS8`jMzAR~2&F?u;zA!i68MNE8!u;z8`cpouWEYyAv+}G4LugQ zxtiYBNBnuiakSFOPai#s!^3(`HxBy#>J8`dV@1^`VIe)a*jVrIs;Hj+XR813>VH}p zu&_duFwQ;}))(skg+{p62UYFi5`h^%j@(96jMh(eo@~MMAhltwu&jW&#O(}=GdFW{ z^VhFmTUb1y#A3hg$u2Igqf0|sI&+VqqRLZGZw9kJav@;aFAxPR>m>|I)HC((%1^?! z4W*n`LQpHpm-Lun@7t!ee%9zvRtSshH8t=IUiX3awhw1&?3InE9~mS6nCNwFlTvJId`Fk_%H6{?F#!@|K>C>;PWA&x1n)GEl836xIgZ&ix_bwHv7n)SnbPv->R%I$k zpwP0K|A|XfP_^g-5D2e9P@9B2q2x{wKZ<89E z_j4svRk$$S-tH(0VtX0&3eJfSB7HE~A#eHO=i3kr&Cl`WMGJ*)MG5qVwW01a;t;Y2iV+gVmb3g8VOAX55EA&^d}hEh7dJ14(S3`1n~eh~g@S51^Rl^o3SKjJ_3%&c)k3 zLPjBC*gXl_S7>=gZLvb|rdG=r@Uh!rZ>K;4GoS=sT-NDYYw;5%c1Zn(5@2 zVoe^UQv}TmKDuWNed+DXCZc2 zvX!k|h&@IY?d0Xtof(_R;mOG-2H3Li`5oqChUlKjEI7;~&F-^df)MfUZLo|d&fXs@ zq7yG#E%>R$RQf*9^}FS6NzXRf=r6?z9MoYwr@@?smRAD?K@jl(f_K<&pWI;;a73y8 z(DLZ`RG{>5XT99XZ(c}us7f>qvaF&0W4|2Ye9_~fFde@%inF+rmq{c$UWU={3r_V? z0en40c6RpBJgn#U*%Bk=1;t4?i2EvTh*czIN=9`?vO>v*SR zt;HYxGl_{1J+dUB4aNwKMXDNNg*e!y9B-8S9X~TI<{^rNsLrkE&gWzjI*=f9y_ex` z2KHnC|DP{ub+`?<@SiF(ptVK5Ej`K+1RQK9p6Y|RG zY^EK?x_Li{zjs!S0(5Gmi1l28%|d~m&-}@NF^CuWr-=Lb-I4BF!L+mM73+aKjex*X zfe=nw#P811@(LifLX+%+<>b#&)9;PL`Cm@SMtCh_hPY^;tazO{2oIDa66-wFZbv97 zDSfcuX@^~VU0{c}TnpOH6NPV3%%$nG1&7M%gsbKPZ0zB zljOmVDQ#AKpEF{8i|U4fJxfc3iE@6hUoyo(m`Jxcn^;ltTyYSTJ6N{Xa+VHCY)S}{ z5U2nfn*(w0$_kOMTk#dX&RkMxF{>P-@e4JUC>kEG^IE1!HC7EdDTHbaI;}%!Eh}AVZy7%f2Nq+*8u3FZJ`!-7WekTP&iGt~J1!*cJhv8Ho%y>aqIWO>R(@RQ zHa=!%Lbk-zzH^Vh9GOeb^$|lio&mle?z*ksecBS`{jR#K2BZN0DIC!09n6YCv7ODR zZaTWo<42j=j^aHOp{vw6Swews)y*T^^>RPfUq=O~iL<26udz&QH>=)j$W6#Jfq*_q z@imV;@fD;zxO&RGgh?&DZmMsJq!<$wZ>nd$o5-Gh0#M9WIamea{M@qY39t?OT zCcwh?^qKA~$+q=?IbSH=*9M7x_8yf2Jl3VJ5cIA2hNVVnaXcf{4%6T00s7xU{=J8# z<%|M(m|Iu@jC6agFsJ_;-;?NYF~Fp0Y%cCVb00I~CmcW@_TR^n2=3N$l3}b-ELq{d zYrx!nf9IA*P?5=_uJX;*@W{L+4(bcmUzHar$5o4F9j4R0!0s5Yj;s+Ih)n6TB|0l! zm8X=_C9j#z@t@PX#s7drpXAi7>F)@}%M3^-bKQ+dNJ8<)6UV7r2$6+=Mml@U&A?Iz z+Wp40lThE#ReO4$Rv6g0sL>kEyP;0btjHZ{&bcvb<|h8SHgj20U|7Ek6mXC?AV2r) z7O-AxjKJLZ7{bSn^Px6*vsb2J`)X}J{Q!%1wGIjboof#BCCnrr(u&)^qMYY^++Z=@ zAvTexnG9vS`kL~`(^M!jU=X%V5LPC{-UPikOj;nkdl#cV)mi;vI`t0%?qJj()eRiZ zE|KU2AmntD^*+q&eAi9y(Y$=G_1o+gVd}#y#UI_xiW-42y7dP^$#rzT@Wegd>o|{o zC79G5`)i_d>?zp)e&NSV{>S3V3*zw(QK~(nX|*SJ z*3pN=l?-~bvHK?Gpgw%EphD8vXQm>#{0Ad8=C<`E9*=rp@&#t)hbnR41o+pE^w2?) z7lR#=!AT8?k;+RNwP2hLdh$;zd3OLPaa-&xKhXs%%>q6^VetOOI~#MA`VxcZF%X0^ z&FNF(c~~2gY~-tuQ(YZ5&jWGFJx0=6%8*<&m(V*H^##Z5E#W_uZ?<<30xVP|&5P2* z4oRf%thue0x_UJq9QK4v%-TFvq2whJxIIC*+ZvpfzXlvgCJu>iI@b~f8{YXmd&gr* zL#c)iR#3O8{WGMqHul59z|%&8Gnu>~i$#iaD;<)g)X1RGy1aqJ7nyC5^bBQb)0`g| z_U06Nd?O!#UnqSn>UGl6-oB!~kQ}%(7nBzI=89t3e2r@jZ}uV*OHU zYpv=?;2U;i+44>t=&o|U)%b93jofPJd;WQyxg=>ujYNyP)XfIU{p*~N<0r?pXG)9C z_NP_+z)l_0$s@(xyMd+U{`S%30s?g(gp|bhw`!xKhCEIloaH}z#0eJCiK=%-&I4pWJ)Q{sr`@f~7acd|VZ=a7QC4Gn52#Y$ayjFZ4{i=X@&r{!u z#r@<35xHi@`}bFh*>Akf^EzOLOm)m@_Ov08rskA};4uSK=7P?|5`U#hF<*Xt3|Qx* z&&~`?hR{gN@nBO7=>SeQRZwsRC!c}i0r=&jnq9D*ZT-44H}aQ6b$u&z&qUz|1_NJp zbzC;&BF-xnE7=&f?(I0CKS*3&IX!mDG10donUKeurVnAq$2f7{| zP6b>X8AX0%84?Rm$3O`n>1^f3C8F$6uA#Hwux7s!k`Q_o-OljXMbP~WXUZ7Jiwg&y z(krH}Pl=LE`AZIaPbBfQ>#eVJJjUDBKpwm=BulF6TLx!G^AQ5dM=1{g8l*D39R~_L0vui?)#J4pqbhRy-+SyUC9O- ziJF6N5FyG#m5}Q4N+Ct45xBRv!;M6_twv=zaogHkIK8i9uC{T~)W(ftH6JxC*CRU* za|+yR6Q_kuxNTlbhw_?->x+V6O}t%G-`xsB+?pJhUb5V~zp zg=>ezD0RL6ZlRqwMAXxK)0GNwLAdMOIk80x-M(sZf3^RmuB`rjZIRM<(C4#|unL$! z+9!LN<+rG)%w22zhj+5UG&HsPi)58MQtKJ-*{0`~O4yj}*)>SpxDI$@9J{P;xy;lt zBEKtO^y*DX2W$|t8biH-$jd`67QaMq@{7UI=+ow~{`Mw+)V!DgkVMop+~46hmrk=a zHR!XSa^Iq&jWA9kqzO;^0PyOD0P^kGTp(+Z=pMD@d3Ct=2`SqR4FT}i$xzAN|*wOKNN9mor~7$ z{gh~k3Os0S^CDarKXE;m>&t#?k?gcTkNY;qIc8vB#I3j=rTpT>u0ZC!5(?d`wpU(R z$Gh4^B3V!|;V6AOarZ7)-PUxy(%@k^jg~V;jvz_1{aLM-U9iC>R!>V)uQOL4Hqivb z+ToZ#jIlec%}_pomkwh<;1;~3!YkbtUr8(E3nblUu3ocQ3p;`ioJ}-B{}~jR?Frl3 zp7+;tZ%_Ikk<(daoKt3`s8Q zx!(B-XhHhKyHLxuZ&#V$Wo+leGnY2)XlC^y)z58ANGsR-K8wBlBHr?C0JT+W)R;HY z@Ey-P(H{UD;;QyRj5aQBsJA!!@9JnWPw_2TuMuu}H?aoLD*rUXR}y>khdXW9 zg&&fWVK}Ab_|--I)k%5Ea<3M_S068y804|Bgm8x<)I+PQMXGn)FwXi0p}ny=88$T? zE!(W{bopG4TOkhC_}w8b5J7bo26!0vou+HWw zfuqW4wGsGjxL;a{ZjEKu`zan@i4UDH_Eiwi^XjMkKA0%Ktix=xkJo+GFFtUb(!-yn zFX+x8n7&xDZ!i%b@*+uXkN19(1Gfqw2+|>3JR}xF61jir(mmZ?Qf&mEUy?ts z5vD^~`xFElfC}b8Vipo)62&O~$lx}Jv7aZ_|$^ze*f z?skycEZbrN7*MvUC$qG{kAA}ljfecF;#g1L_w41=-uAd>Ig~*)P9A&xUR#GB8XG7R zhGFc61m+h1otgIlPEM259=#en5=~JqC?m1WMg{829Ho4N_Q}GC=hr(>7<`- zqM6G$C2BAyz|6bPb}WUDvt|6*D+|(@BF4yLMxm|4KFeVwV{%qATzxA=P(Wd%KtKr- z<862w!~Oq_$wpt+AC9uPlL4$%_4HDcVfccn7u^=G64hm2zYcY|&-5My`s8JV8kwrH zrU?usP<@)nn|DV-Il>$h`gx!mtP-m7rv5$AR8vA)+8dMmxTH|1bekDto-*h60AJcX zmtT{m9E8N}YVP%|86Bme?|#x%2W1QLS2J4z)CiF;Z9@tEz6!8WvN08^jhVA{p?>$L z6-Lh{78F>$TKxTkAt!l1!L*sGCCgn zWxWKCC(tG*1zl6JAs`W-c^`wD zi(H0}*g9sTe}L-Gh=mVxDmoaODaKT-g_2|d+qT2^XUlo zKsR}M-AFRzPADgSC?{^{MPSAoKeqCUXi_Vgp!NR9K`7&^H{zIA5wH6Bjz3T^eoOap zkv-ynZfWOYfs{3c$(bt2nS!%8;{JqeZ|B@eiGC>IoFfRpr_dn9ysV%&B9czN`|^V& z3)8SS@kla5x{i2El2c5QdQ6hhdhcVgN0O-ZFRNxDgR|@Xu&*8Q{vGjt9ar+IPk!G= zAYS4Nu_*j!N&k`3|1T8p7N3RwMxC%K|Hi!jH#GRK`$X?O-wtA|X1+_6mDc>t?k)o+ zIg>_P{8f)9;n$G#82|A*@^Syp_auTcKK>vbDBJP2M{W~4>-E3#G{Y&kfKQ;K`jEVg(kaGM){5d^*`%&tA^ri-eDaVf0`XVUtU?6;$^xx# zg~`cJYG9}eV9aGEPYL)}VyS^KlJ(&h=iNu2uryJMa6#&f2dw}J^GzI+A@>{;fHy^F}8 zgv-vegFSDf-@mDUiFkMJZHsRHV(=<%}#d@ zCHE}^dvdjCUfrO!>OLY;3x~*#`lucxG8)=hi411`03se5TD5r8W_^0Q$#*Sn4eq)M zzVY$=U2vHZS5t4;KVJ)9o!?e>9aPN}o_qMl|DF^^r+caX$&1ZQqu|+)xanlzqn0`^ zxe@m{^$TXX9Qt@9+B7NPu+$Exk=jE*E6jW+r5U!2%`xV~txkvV2iI5x)PCS<3>JOm zG@$1rBP@6YckA12;D|Dz7$v4@(&8L`b2q4D>9VW7Nh*-9v2|nRNC&s@aPwO1KQ=;}we^)cy;8trOY1)@bAnrD zf@_rxfzsO32KYe{FbV70oGKlw4wu zqV7YIbTTB$NRoh7{i_aVyE6?BTas&iId5|1E-7|3@jsos*ix>0QiTVS@iJLss}BWC z;}3?4RxC^zT(AKBAPS6_&Avit511jf%@Dr6KH0lUgo_wRvy@!n-T_2Y{R1-mtNVF$ zgD?hBmRSduoCf=o(DutrzO?UVPi)+a64wn%kBfCM zuaCV_E6Wat7pEh9Kdfr$NNEPA69`O(D3qHAyAS`+unD)(a~h1KA#XQ**)w!`ql>c34_#efJW#ns#oyr*>Xs= z0K<M3_wfe~=%^ zx2^Kyj!w%$Cw$u9cV1!-pKMj8+^Rd(NY~At@6xD0;N_)*$edPx**yb zBt7tTI^mr8(DSotn~@wfmMzR-A6m_F{b!{a@fsQ#az@~hW}lMiYn)lJYq5pAyUG$K z>N0cwb-?jvE3|&DP0g^+&DYz^rz^W0muS@Yx@Wqo+uLA?$@+XWVhnal7Hz9)n$*(w z3;1UwqN&USl{4c7bRunemy$95jsuU9BiC)E#-Nors1|x z<7_qi!AnS8$tt;%Td%n7&+rwBBW)9}ZQM_5bovr(Jx|>R$B23xFa-~BfX6va(`5D+ zEz7k{V!IjRh|W}a(@15B&-ZY5&Dx?_#6;!Q8H%BW`ns{vL!|x6=XarHP=jZbG^F*7 z`_)iz8V5-`N6KbcIW9lncSv3dH+tH>6A-T>t= zQOCC6;0g9xzG^wj$}9`!8xSk%7Y`Z3;`o5`^YhgcCeemKAik;$3QG_? zxXZSp6Fzs?UB%f8AQeHRnIXYVMO&4}bAL~^j{ctwD!#loRD2eqXVUL4Z-hPS#AiV= z&Axs0o^THEL9ZattjqH1qEurvLu}??zAb{sONL>0^*LB<&v)J8J(w#4$xiZbtjJ@% z`#YER+9gmMN!)y&I-x+HHw7s2Sn!}%b1jvnZ9 zwokPsTFio0c^|Ibe0l92V$FC|=&8!hCDkFCu31?wcD2{7*H9yKG|Z;)5A(WVQPFQ) z$$tY^3WCrR`11<`HMcqRf`dtJS3xFVv-9l;mkBj%=ic0Nq-60?{{438Ez6Dp zp=0vYzgl?@;OuzWkAR;r&>1+(a*}rH3AiAzX7{>Qa_|SMA0FiKavjk>ngV* z((2-q%4$=8$7T(0oV`E-=D3W87^EcYG^AF1NAG8)%=*C32P(_TThLZF`zyOTL*Vo7 znzqVY#p;30I&A3>^pmXt-JD`j6=xlBLtvMXg*VQC@TKjlVx|(lYg}u~lF0&3kj!nV z3h_})boCQUWVv6{z>1TwJZ;JKpA_aLJj>I0t<`nrr}p9xeL`=o`(7%UBJQw;?i5lW za4!*P(WqOvj=x#}L9_ud0+SY-TnNW=~v zURBm{U;p9Uo0y-VRq0V9SyfuD7V7n5EW&%(So;a_Qj^QCPXo?@C|+^gRuV#np(|81 zu)x~f?vvBtbI=oZmW7WOtGW|{n#B(hDcXnyaHAENSJlV|{LH3dRLe26s9!~e_gd0& zt-B}7=TaXYW3vODJ-8TYIi_UlB;7KqMxSQVu8!0j!Zr0Kpi(Zmyk3n~+U_+cE0-xb zEJW5i0AQWjTCYDtff0Dnp|p5tq6R9zzsV%(IG1TJo>=K-bJ2dlV1qLUUl@usV-`IX zacyh>8CA`@ABRL^Y6%>4FDCI(l2H^)otfb44PCoo+3M!>Ex;~l3})n8G&CF<9O$cW zgkHK%UCG;xN)TnaMvWs;&C<%y!+=Wt|8lEhBlWJZ48T9aSb;x`4f3B6TUuo<26~{1 zJ?%>pAbf{+iZ1A0$}5j+Xy{!|BDFx`d!0{7QNgxB_`YHvS5JptHsM;tEGi3{0wjeg zMIF(Iu3d%b#JYUGLJMT;*>bvc5bOm$s=e-3V-g`uJaZ>>H>|VNJBLASJi8lx(>isC z+I__79)YhI1GG1Tr~MOh22&D&O01k;UqyDi|4<_nrpx5A+jS#ttxoqA@c`>6z#V6X zIcQFS;^KMdN$e3hO+mF^CxI#Z-aA;puX^1PLylGBJ3hk7T6E{UTcl%sy~NHp$L2_t zOkdL$#PIPUn+BmMQTtfqt(T|2Xp8JiU4t&516>%j{7>?S7?RkE%xM-vuGz=eGtPOaU47J-^2+=f!fjE)O?Z)@ibx^%~j_x0{6d2_+6yBd){QO=V#K zel1HKLc_T)3R6fiOtMgXtf@}{@O3Ww^qRu$Y+$Zot>^^PPZ=sGVD84MS_({|)b+k?1ti%DSU3&N)-K#N3W9Zu;be(Cj zb0zC(p#Rrzs5;y>N)#ozoV97Rl2O+#n)O(1s#`w)I%!0@eWCDfGA;Q`9F>P3ahZ*? zu-W8wysxJ^d(&5!YMw8k{BPF|VQjsVE;vSbqy^Ar706yz%R0Avdl>Oe5n)lc2Wu+SOA<))8op{e}y55xEO%ta~D57&}QO8 zyuKy}d!QDSma6@Jdcx^+B#FhD_+8*vE^i%z(*d-~ZwVk7w-BdLROCTPo)w}_{ zv+*`R%WH3h%i^IPyJ|m|_eHNq3!i6^m&?ZV{7n3*nFVY!NV0=V>)&4UuNcMig2V6a z^Wz@g7qPC^0m-lg&4}DIFE|+|Kaw3R`czc#iRqr+H$4R?(o$^T&d8sp1)Et$}Wl1Zz<4 zW}Kbd!d@rbkH~|Y%f9hINo(n`czn_(bX#SB-@wk`?$&Opo_Oi`<>4f5DDYw;p~+&6 zqF8QdeYF{F%TZTG{%`AyD_1TRqQfqF4W2%JIk{tK`OK-TXeq0cq!|B65Lcs6yL9i! ziN1W$>#Ga4JnPzK)0fIdaM-x_TCM3`H;wwm$rpuLL~(GgZ|lEWrqp4fa>%*=i~kB(W{r>>(+L%p$y>8SEE7w>q*HrF-t8q6J)b} z4Ns%*bXX40Ahi_yJ4<5gDqr*FHq(FS%5(l&%Z1cH}DuMlF9GH^r|BBF=_Gjf;JbG5i%`4tG zOO60VZU1%DpI1Vtg8z-n@)6>df1oi7f2P+UnPV>ng0nAn)dU1fB%diJ1_eH z)K>GAtp~l<-_@6RM{6Nv_VMU!wCWwjKSTc(?A;8WQ8C(l`_!&QoXMNo(emZOLx;nW z$ST0^FX0Yk?&PP-jb|yLRUf=ZOObM5FW}JE@3$33|A|Td9~&XYyf?+Ny8T~*|F1Ta z4`wC?>&wTVH}yU-$hrSn&$n9=c{C=tI;g5T%AQNLNtRsHK3X*1{W)*0w3@Z1)_d$S z7WymBnQQCK!l=51-L8vmUy|nBMUzY2<*b-tQ+<8$M*PL}_jZ1prl|>C`>E2VoqB`% zta{=FE1&eft=x;00SuV)eJ=OVv;~4Smm3+;MH5>ETl95}jPizibRx7-M)1>~{Oa0m zkv;+ikNaoNPuMz}53@acom5YI z(_P6`Nwce-FJ(S6W6qk8`V77`=y>k9&ITqvcUKo`!y@)8v#P^kSF*VyxM=P3>XS{E zUt6i%Dc37gW~-ff)~USWM7`jqCV|M20e!D+hN`Ft+0u-egd#Kb<0qIf0ljvFcmz%T zih0%GT){(;@Um9PlJk`|x51CT({3Y4aep9*cArda;o4jEW%3^#%Y=`@J^1Rj?xI>l zVZDy^<1jPy^rUI^wOQ)nq=;@BJu|b_f><(LW_@*@(K7lcZKka`CQH2S8G(3Lcy^$F z!jF?*^{?xK%9x;RMs!CU{Pn~>-6SKUa^bz>Teb_|n$Z_&6a^Acwk70ZtKE*E@J?|L z_)9OpZZ4pm(1>Z+)ZE(gxu-;?aQBTU;G-^xr=|#PkU^CR5l&)qP7%RsM304 zK14f8yjFE3KHc(j;Dhg%*Dp?J(mhD3wHzj%C;ayA_R^Rpn1yY_cLi6U2=o&-ZAg|N z3Cl1lb|C%Y(Uj4PvXMvc#!63?JerAkp``ggoGM`sJ*ks&eyD3w2k6d%*`!@`TfJfm6X&>k)@Dk z^e3Np-e0>~2u)}T3=&5^AioV+Tb8XQoDCMBXPpPPwuvS_@0G4uuGRC_&k!ikY-!(o zob{tIk*;alhC~&5`?5i~@1&%EM&jV8=1PP)bqCtE^m)LD4>-U*wu zXeSPU3@8n4n1;(qSnh^FxsTsR3_;P4Ty~x`6y2f1k!S{6MnKUvRo&(X~6BU4wNa>-UbUx$rCKj8Ya8Jn|cOBRkH zCY^s|btBxM{5Clk$BUbd1n(mZmP*Oeyv^UKbhkb;3LgD{4B$i{8&bS3ZL94itNBu5 z)YaiR9-#*`N^xsW9tI36s@?gy(4Sib`!w{5Q<)~}PN(#|d^5(r-BGgy9|4>7RUp=? zPNbi0TFQLMU^4W3iYBgI+VJ9L8o}68+Hx9VY+a9iUDaj1&aq{ws)s;XH`BpWyEWB0 zyB&d*L5C<@hE4ttgL9M1n*%jII*F+p1w{c_5=){qGEp`FA{FN|Cxq(Cp9K!P!((&b z?Nze-sENzA+S*?;^>-u;jm>ec{p`{T+W(l-)(@-Yz_*OJ_}sa3_NmPBC32AFWk!4M z$Yd>v0D_l7Iu~6BDFtR3S^1~)_2LBe8^Y-|m2=VUqPlMHt2~1!r%{`$>s_iPGCs$;OdQI{AJwr}2S;-SJaGf~w9=Qp?b9*TUT)~{XY4GS5f;orbeJ3-UQC^Bp^Ow(o;&$F1h3f+KXw+oYa$uS9Y-i7g zbxKJssq^VmBaP+ymBB4Oa)1|K;?47+Q%J$>FfURd;+7k!6r?@{K>96hBd%8pdPD*{#f!keTmO;1Mxv7w2Q0q;S7L24|+%P*-loUykvdz;4PPJGv<)y!H{)c zZc&d%IHIGkuPS-w+%J^$>oC)Klw6wT4-UH+fC%VhdS_8>wbP;|qXbT4=|B@9-r?Nu zUtWHrdVC-g_Po$)IYurYvUg0U^=5GHb$8XHhJn%Rw*z{?{n>rlgW_cLZ@)3_mhinj zc6n0PKcr+*_~ktJxK3O=@NyEo0T`FB-HnNz5z0Quq|nWIL*&^(oW0oQ^XXeegT(s};kVN<xzTYTK4q{$SNPhB zhj&d(zvMvTfwsrFXS?9l`JaAU>D{rUsq*q8F8ix6ypeR*mv||COLK5Y6RB0P`Y_cv z(LnHDf%on(5x)4#?NrFENXbNGopI!(0SL%2g@oXVl1$#1TRQovfqalt;63PGz zel}D_6eW&B97Ub3ThBY6GsQj2?^-Di4V1+Cl$wMFp@Kpqcpn~VQi?v5*X|;5ib!X+ z!55X;@AxrZi@2m**ne3uH|eXN$6&OPR z65dIK(XLt%dzEyr;VQIeu#84`#KmgKL&YS4XI0rgZ`_)RaQ(G5;ZzfhZkp?ZUdYu6 zpJK7yx3$xsS~;fBCPsp!S18sT4OPgW;BN-2em zE}4?$Cmw>}b@&F(qC=T78Lz!ZU2nW2jr%NjVkcZJ_5F)68(%~fzCrP^jv^l`IbY*h zeeUsvlUC0;qP>o@*M?mNDDC0YY+@o@NORP>{RE9u zl@zd5Qfpzek*0d*kRRRH5fBfBA_A+V^*Qc|-b_hH*R?|0*E82MO8O0^Qfn%U*X)Z@ zoh#I9!Bo4}&;o`kYx8rwhP*$_#T5!kB0Lp7ugGCKwG_R1Pl?^m9)vt0&J^vZ9a>|1 zvDGEzg=bMv*pr^t&m3cuCEY6hG;dD2&B(bnN8+W}RBfA5Z!Bu!XZv^Llyx8-olYec z4NAF0C*@m4r=~z?T!rD(#M@2>`Ri-K!05b+7N1kmWT7?Ob^=E>O~I!;#lOL08DWgg z%s;sJXKH@b!_s;+rat)`9Erf@OtuTdamPeEZLB|7#8O{^?gD61_u#RmgiA z=+lh2ciLkPztQ`+JY{+w7 zuw7|4tS!hbF5k4iBx~yAoXR@Wx3rWQS7>MIR?VPjH*&WE-CdrYkuiU6deZoW)FRI< znIj6B`(Qh7&dkGp$pr3hx*vTx)-P%Q=GfYqy2OH7v!6%n*!x@7rrw*F`;OW3VEORC z9r~-Y(zCdGVaH9$RpSSFr_WfNn7qFAhVVgymWCIS6N`;~VZHfw0N8qsg_D!l9CbeM z!*;P@Rcd0Pu}|ZB$)dOvVYl@e3lpcWY3=9pu-hz$S0zs_H1=v;d-BywR%%k}tn^87 zn%`aB4flM7Sxa0GR~WXQ+nJlF)1|I&()QlYY*qQ<(zQ*OM9=t1V{|ju9{Wby!^<&j zu3MUul`=UsYvv^FZ<6n3c%Wm;EcYX5?cbd2%2XJguLcGeWHI$-9%lu&=g>85Y) za6b+#4A}b*uSiUsQ`hVH!rVj05))S(7V1%ru=O{TChGF*`aBQe<)4|DyrRLPVO}UM zW!NnZE0T3{>YUGLBCvJett^*~Y5le8zL)%6g0N ztS|dud*!_hO-~Evo()LNZoGT8I%SpXd4oL8CpmgOIXfZ<+{#>)W6VutJkK)@61(+c zm-(9aj%0tO#hxcHIvKWJJa4`h-qTgK8l9JKyyE#q4qY)8#fA6z@WO9i@*rNm%)P64 zwGj?t$&ZYGz@>K;uQDhuWe5+S_LWzH*O`r$&}8M|?rl@!7+rehiEHk{88I8uSpSV* z+xop`1!lLrSCps|S=srpS!PnTb`LxEh9)Zy_iUTWFuK%DC!9TM4z6#;kj3rB^49Og zn^KPwD?69#LVi@(uhtjEi=Ke|h%XG~6>D8y*&n$JGqK5H=^jdRilGk&fIcyeV z0mCGfHeVAhRF{F~(s=R-(|iRQU)DSjuHx_qic1kA1I=aen>_lUS7~-Wv&Y9YHaN4_gsCn51RB3u*LO&-ZV%>d2!gxwb=;_4Z|ti&}3z9s8{Dl zjh$CT$qbnE(^*kJpzjE8k87w=V&$RkZPVjLJu1Ui^C5lFyc}+v=QBCk%R~d-_@{`k zSXx@KNv~gDTDYWO_G5exaxU#6i)t8*)F*hcf|!_|2cl9$yw zhosQ~T~;Qzd$xK?9HX0SFniiu5kY`f9=z7m_*U`sIL~3hk5rtPv%TASl-R9ZhTIv> zv0y_zhRnI!dR(3PwlC{)GhOwRFlIsg=EBF3ZDpZp?p`kYi5&d<#7&;Q?2p~NiS1YG z3*+LZZtGT{W&73URZ|#U_O^3jt5u;HMWDEpLH>AoVC8_}FX+apG5aGBhAuSJ==J)S z$_pOLD161})fUtms;xX^sb87MOvuz7&nwn1Mw!*-Z0Icl2T>cY1+ox2t-*m1QDo$y=DZ}uM z*7eCuQh4W(Kr@O!aVY~<9vim4`W2J4pB6>J%@)bh>82L#|ALMdJk3_N+pg5Fm~d|- zPK$ELTABD^dl0U>5F2niiSNX>U#u@m;=MknxO}sr{#2i+8#yQ|`};)c_B_h0EbPdn zu}=N+i`<3M&|b4whU|sXd9}S7RZ=J}WyoGv&a9no*c(^jBsePzUB}W9u=a~}*}~*7YuAAz7hIF<`gzaQTbq6i&b$Y_GUi+X=WRE@k+d zuk0Mmf%(d#W9vV*A=7-VWOn#y7H8o&b#h)T(6q0puV5~BPc8T`$TekN5EFLU20k@ zy0e{wpNg9A?^R>Ke#Mv<=l#>-+gNdV;`^DXk8lT-EQ8rIJc4gyO~^B9Xc-ijLhOCU zyb0bD?)k2TxFX{fO0G!KX60e)xm`s?yS!S->@hay)ezsAK>;`0E7;m>LT1e;?i;=f z=UeE(9u@8`o6i(^x02bP|w-Nh~Y-i9WUu%*w*;QWH|L zTm#!!=BFox`IhUqF4PqzCcn_&ynH3x*tw|gg4RE_q0j5`l9N{*c3zJWZtR>_cVS3N z%b>UvVjsFtmzS8js^OyZm%`mgHaV~Eb4r}-uzyvTeJ^uwWjhtKfrSAjE-9U#VC!OT zdeTH$kH|f`x zWX~?#*2dRd{jK^!?r`S^c<1U{o%h1FT|TCt$Eh)EcA+qkotuB`p2u9^%3<_RbkA32 z;*-+nEv@VMTkGcBtQ4-lhx;0<>O>715yA-piToK!DBvH0l$-ikG4~Lp$5L~*(DV?b zCsQ+)aSuVtn3=nUj)x$jxRk*^Gb(pxM)5j*#j=dlC$~`X%qXFHnV*%C$p6ZmvphWY zfF=x|H_R9>`TYxM-3nwI9;UjA+{wvoJh5sKGoeV;bziSNu O0000wmy3XY|kMnyR$M^i6m%pOC6v=6t(*y(rB=@E7 zDiIJISp@zqojeNs4?3N8mViL5{{CHYu#?V06&gaJ2E%K5K8xG*V%!u@lBQI;dFPc) zXzp=u)hY1{>l*#k`TSJOJT?Smy50loVNrqf_Z&V4pE_k%&35q|8TmT`-HX0SkVh5{ z0~W%!WM3>>b6V?}iL_mjo%eyAIurINsOEx&BQgVrn%xGMW(Lo>DUDX@ZcBgZ?%mBX zi(8rPPR$tBI7dKm+dpxT78u}L8btx%uke5Iuc!@#ZKo()!QLEcz%9T}sk6{S`i%27 zieOXD?aD}5Pm%p-vwJ=^oYrcin4`NWIVeH;W-k4+`lHZeUxZ8zho?tv^T|qb$I2XU z@EMyP|3DRQL*UkUAJqVM*OzgkFbCZ}1&pv-Ukxt62pNg0894eZZm)HD7=k3kvB-gh za%EG?EsJyHohZA8c0bJ`txU~v0|pj}we{*Ifw?G^m|KJbdu_6$V#url87#9r1ce>i ztDA&vmpc<_`59y@#$syvRm^*7d1Sb3`L|1=U$vK(n6AtQh0;E=?n`^wgoW$B4liCGZ5uHy$Soc-b07fP-(kTQ89Rg;cnliAdOmJc7RNTl zMbfUL)5t<7D~>sBK0_Q?qQ{p#nF=VJ5s2LIi2*{`}I90$@z}$ zQ%E8_{EhL-JfduuZc0md+v?NA#>gkPo*M!jT1Sqj(Gei6mEg4_YN0{tWUFeBppnlx z(F*IuDaUpDU4&Omaqvg0CUa&Lx!vTp-Yzjq$0>kUYOZh6vxSGn^ac$oEFo*o4w{Lr zsF(87lyWBA(ncJ;eFAuf@%m=#%PE=-vx@w}?)CdCrtV2dcvb=berw6H;dRPV!80x)~6dd zk%ge*^Y2vQ%r+}t?%f7@W{)Gbs2t5`G#q?M*Mp*wJbG}?*Ds|cf)Y$-S+ghVMibPA zY1JbAiZ9vlJVEx{TJnmuf2aCT8Q&e7P`Z6JCG3r#;VIszppZ3RK7Omkf#O1Y8QaEu zFV0*$-fDpu>kv!*$9k?qwX28fhjiL;J zadBzs>1oa>Si#USUCsraiY%pW8m4@$=v~~AS`I|d6A_Jv`T4FR+iFN9S)9j4m;%_0 zHz?F!E4t^2x&%2{_54`g`{L=8t&fj!bd0#Qa%K&=MezmKlW$5=cWb9dX=zH<0*yUn z-Gnf6jA~}~a2B~)M~aj2HebZnmmlx!gz5V53E#tW7*4bi=lcEw{bMWE1x3*lxeV9h79g@Phx0$+u-GUFyh^mTL@w zb|P>Z5D|{cc2a5ccK`CCKBwiF%lrZERJ<$Wrv?ady$q^it1inkB#;!LwpwvwOboqe< zsuk@%Qs|ssGVx)_UFP1zz4l!BS?^0VDxzmivzl-M9c+b6+U7bN_fh^)1L(Rbo(mqP zb)3PwQeW4oHYz)DU{r>hXgSI{m&%v38B^5$>2j;a+WL-I27j`n<+1`QL+FWkJm%S7 zH4fM8Tt)j6DZ4~wou9BD%Di1l9Wo-!pGRb&ZT!!5f%beE2y-W*W{p5)$itqbz<@7 zpk;%F*p{`PCtI1A%_W>m_5@mYd#Q$<4AZ(aC__%oJGjw7yCEu4#KbKcCM_Z#tGXLN z>^Px6Zhu||hW76aqYLonY8GUz5p#R&v;H|FLiA-+r|Hy09UfQF(-gQ9#QgZ%3qmi1 zckOC#DY9J95C>@kOQ70=I36Rf3SdiRVl%&D)x!x3j3)c#tID$V+uP#!vWANAiL~de z*Oy`ra$nf_swuBR1ad;WLmqMI zxt(CV#6qCdJuUk!Ten%bY2){iVAtGf<9fHd@5TEl`ln+9Ji)O`bJcz4Wi-TgG`U9wz71j|k3fk6g{U+@ zw&>=oen`Rdv1k&H%n>g0tCYK6#CTZ!r=mZNTp2nBc(JmxOL4!}g;=;4oky=-92$gg z_6ct+gba`?*QJgH8!3>FVQ*H>jcjhZ28m`0M^)mRaOa^@A5AWcx-C84&U$wg+9-zK zeTo|_929b22r+FI;z;ginRmTbKOajhmfON!A*by=w~(1mg?)?Q)U95^4HBzWW16Pg z)NS?0dwV%?>j9z2wVk<%LN*20iLq(#&YkWIe<8*a5!Ges#^hBWlu`}TgK_!D%ho&v z3EO^H9vN920hGv#C?8qHMXkDWojE+A+J*r z5tXk)%;@B~qr*+Ptcz-@aOu~`E=ZnMh#+Gqd!utxEgs|lS;0ZOJQ_cD11W$~ns@!? z^~n>zzEzW{Ma~etyW(T1U=Ua9I*DdHsVgJ)Wpw$y zbG{KFQBwBvN^Dhlf7kwCE3r_Qx}3YHbpNFFfx=cXWVAbZ;$2jbxvk6*>K2v$)biC; zTT`S2*%jPQXK+n!77};w8}t}{9nx50##8xQx8{#MGQ$%W&}-VuNH3YBvL^ zDM{Al)J1!RTkd5o>{}pYf$)_AmbC5>cu&5KVZZct@ts-6w@(t}BlWlYSfu!KO-f?E zE*(j$e6b{nvWg7S73y4{FclGvE^}W%thE@w8`Wnd^R9{Wh}}QmVZvNPcxq$VO^nI6t6Pn5SUakR2b_ z>Dj7V5R-N2$|6%0IUm)B*i}wa;3<@NR;s;af9e#Jas}Bjfp*N3y~|fx&2Ll8(o^ER zvO@2wvoJ7H=8UZI6sXyZS48%CJR~DnqSMaB7 z4bvy07On9qC`D(}8~mM)H;M|At5XW94INcUK#{bb5dCcg>I`i;i*U$5eXw8sSj}JE zwdwb?W zYqVpfSa~E*91P~5KlHFj%o%VL$ioT;mh%R%ta|zH z-wLuRB*6GQ9xbgFxenb@yp8(cNh!oY>FO!TrutUN4|Tn#yMc^&ze%FgdnvSDW1Sv4 z_htPnrP(}TAD5xcC$-((i>8yej{qKSjdj$ddy18^ttO_-hhRJt8Z5tEhOKZnF7Pnn zg-##;&s3}AL)H{#<413krp25RGyO}Rj(2)}9Z^EDp?>J_{6wYK-WM?ew2>_AU`2=7z$MT&5(e8N-p z>P2F=QC)e4Kv#;+Hxj%lK@qGa7ZYv;tP`ba(Uh>2T%-q)UA61DgR-foyh35z31GZT zU3fiZk_4*u1*t}wR?fil7ZYqljPW+60|f)m?b3uJJH&~h&F3{=E5=A-kAXQzG$}P- zlR}Be1x*rc;ChD!Z=;@~e=N14JlNh5ZLVH})xx{xq6e_|u*%R(ovm+uf$o~s8DDx&<5X?&0e$ZRDuxE^%--xQxzOjQ`{0BJ{Yo z*VD(-Uu+=i0JS)$F95eo5amhC?CHvHb$85$q*J)(~ zPhq*!M)DDyhYU^CIAVZYH(QWu%vBhMaCsq!RkscqeQP2z&==OD>M&E79+#3+y|%6r z(3609uHtcMF*(F9J6JWpk?MaTWt@7~#5uX|f`3%&MuUPMsdj)S-;2N7W=q0^CXDsJ zE1_Ft%tyx0)$K~@n9K?b89*FAKm&c-9Qdl9CV38wS!a z#nBeQH|Fz-Rl752hALu(4eNXY&yX*erF9hzW%DglBZk4|^LHdPOT$ty)@PF@<6jX# zGmrh&l0A#m*ZI8W)+8lIRwkllLuhG9q2moted7_rnOkXhZlgevuy3xc6x)WA1ybR> zIBp7;OvuOON)z#K@qasctq)=?>ugu>k_FMIcVNLg8UOZ7j2)-=t!q;8n2Wz{lSOb& zyU_cDu}pe92sgq%x4JeFV;2HEc^b@c_qR5S5hS9bU8^FkUx{L;bB7>oucWAh&M*vu z4Ns`J*A(`9`w0`x+`2}q==|4jJE$Mjo>M2fp(O!r(P|$9zaE*u@W_$KP$)dMR&@C1 zaI8e)!t>v-NR@>@#NGdxP#DWlKP@QTC@ydmN_6(uz4J7|#zp&uu~b=DXk9&nPW?0o z@YMOEAhOH9Zd71((&@XLY+n#l3tZ<6qFRQZ?6Ovr1X7cezixlFc)(k5JQb(ie4iS8 zYmt$&^lK;cFskwSa_3$g$(ke8_Twbcp3%M@kFPuD{i;4UO8!NfapBNZ{RqK}h!Ta=+5?4hl3Ab&?FMt{BaN1^i}uZ_HUQ^ zABvm*mn|7#D9HD;Jag`m<3@G(T1ER>&Bk_c6{JW^1wIQ6v1%PCT_gR~jebTEIK^H{ zx^Qb(5-~^~+CXEuwdmDU@uU71$%8D?|LV&>gP6_rtBH^}8rXwKd@TKphWZvzWmGuR zwlw6%x>##A!bAYBYgb};Ce+DHbK}nef%DB>wu0)3z2d&fJa)enp5*bZA?KM)?N{UQ z#C?=g;7R*<_3{^HH>FbYD`?E-hBp?5myO!}Scdv6Nvdo?mH03IUeR0qm)aU~=|`7( znniTwT{Nx%Od9SWs@L5CG0rb&X(p@mS``R<%&Y6ukjpePK|5gHl2CDT%NAuOJm@wn z9r|Q^4WgW#PfTJtD*q1ADET_r8*~($bFyxdWk^RjyV00r!_x(&knUq!`s# z^KXsBhmbk?=`5J&SeEbRM{vru4f4xhC7&E^zkta}bKjB%iN;CeP#zS>D zeA+y^8SQDa)GJYAn&pL{&)hjwV2m6K29asgEox+{Sj;ojh#_IJvLtjvLN|b&O$|MT;gpe)AKi>B#40PlxP(O?{L!+&VvObt_X9{)q@;!u{bF!$`<^D>S) zFm7C2na8$TsI~2LQYcl{;S$4!jN+j)CK@=?0r>vvCOAAltY#J-s$up^74cun^mDGK zU_OCY*HA-Uts;qaL}crRqFl%S9?2tVly_CEd1g_@kQ|@X1&0BROj8w-g;9A}!T6nf zzWxrpU{j3+)#%MLD9a39hlGUe;rq&4Wd}*7wz4d0%I7Oq4Xi3UTxp4Z25-?j`dj1W zVN5m-11KY<^a^OG_htb?b9hiFvL>Hr@wpux_)@%0|6fp+97fOb$*$2Bg>GF2ymkFf zQ~MRLPSQc4_3x5>oBn}nZxl36q$&%Dj#*}lZpNFmiR=eN%@ni$KBqA=P?V8!6j?j* zqonyFkJ_$eqM5B465qI*7_&J`D-2TDxbVXJ{cTjvr9vC@ZB*2ch3yCNZ*EF=Zzv&W zx4hd{)E4+D>k|X-od~hW;P%d_Mh?!^O2EAB=-!f~jqobMJ%5yRIVv!1KleqrFDMEQ zt4hBJuSXfbqY1wT`!Eqd4|D^>r_2Lyc$#W6w^bAf6&Cnd9EedkM;g1ZdQG%nT#yuT z_V-3P!1B2POYM}QfR82Wi^kewDvt&ouXLC=A^o`hddoX$ZTDMaw2^34v zK!TrMVq!rhFJBg=0$R^F`OgF&NHjc+)V$jN3O*C-oSwe0v{lnaT!``2&qz|`C%8oU!C(OsigJlQ*1RqQKmOZwt1|&T>nd?9#^anJxxNX_!eo%q6$~V=;pHo!>dfGa1?{ z12T)ZQTj*h3eevdZmcIx_NOkCUJ%~gS>@CnU0FdX3S=MbVgN~*B&u?GEd@rz^lHTW z{jedG9X-wtpT`!Tu~L)7E?BsXOXKsZMhEK?yZTZ|~2%WD_uS7hetFXTUe zrL=5ER=Mt6J^3TLxAbYkFMq9YyoI2e?Wu-YUz^V67{2v<^YoiVs?;)^6tG(GZIt+L z%&Jyej1JZK;MqlkuTS&+)Ry4~wmrn-B-xnx-5jF>VzWF#W>V6PV=s)JJxntZr@0xV z;ahT!#$BSL7FcyE%LvS3;u5evA(o`FPD7RiR?~2uKU5dXFgHoP&pvUX^c<>`?PoD zzapmp8wd0MfK}hG0p2x{WBrU5_&Gk!XT#!DBOP;017!ywSAO-xzX^KR4`658D}4Gm zG0_ovm*Pa{;+geEo$8wc#>iVyvVo3b`kyP_ug~b(0dgd{$mmar2`*_`Z}kt+{H`A| zFgNo*Z@+sdRm@VNy=kjg&D*NI+u>^%qGraM@NGvV9wQ6Y{l{DPQLUW738$nXY6_NX z$x(xEs#PP~P02q2a{NPXd@DoP&brJzTNMx;?cm&8xw&|snxH>CJr3ej{0BrcJXLjG z^@3m3sS*@6Q|H9bC08~2qC+H5J{kY4EeOG)VHZLyoMbft36zIXDD(2#Rs>m)u(bT` zKR)jRhQ(}^rzR_DlE3nZHgkWvvU`lBCPw}a%I8PrLaDU%SrKh6r%AdIG63mV8^`5(PQIS)v79pjg{5>*IXB? zq;QS+zmFk^)3qFJ?zWLujL3rQOSx_S(p7af7jh+9;df}z-eYx+gBRcFffQsVb#-&t zM@M)B0Ud(w6uHFTgCzQQjLiS0TmbT5_p!4iYdQ<@u3-=5-PTALpsB8BK8ip5kCX`q z{C!o=2GMT(%8m*)NOJjFVrVT>bVf^j2HJ7mW$E=aU<<=zAjhBup+`DfgWb&;yp~NF zQ*DmEHC#jI@@+Ny8On`x-rN%D+~|V^17sIyiJmR^Kbq1XsvI0ar7(r&M@?Z&TFuw+ zSH?RAcL3C}FjaL9uEFKK$hlYPI}id+<{hCcglY%2(|_Y)z9kQuFuX%P+ic zh-T9I{Q17KY30lI1Db8|*M|VN{y)jz9b4y@a4brmCruuDN`A|qf<+%95b_SC^w2an z4oVSM?w+!n_V+^gd**^uHPgFl*!42g8)P=xdAs~aJVhkwiQ!%&C z9dp_?C8Cy?34m*1gm$2!W&Bvc3L(CQY8W#s4+*?;^GWZQ(cov#xJbxGs z9xTc~SUUO_yhKn~^>*)`5T@ZodM;TJ@&slJ&jFK2pv)Rhgk0!Kf4Wz(fLS_k zG&dOC^MNu6n~E8B&u*4|Sh_AZ1VQL|q?hJ574%gPQ)fpf881gwM1O^Q*ko~9a8yTU z$+LejhP(<{la%+R;rDH9-Cu7t!ucsZ1iKXtkk13SwvT9^z^?8)t0UJ=IIg#D98Ged*${Q$E{PbHkx=TE}Y} zazZ~+sKVvCgAGcWTpR#Cq(0Gg4ij$P#p7tJgkIJ6h0}%x^_JMfAny~x6?=9XGT(Te zxk52p!QO&k-Wypo)KwAQtPVG9Vvd^+99BmSu4INgOg@<-&iO(_!Tnk>4P6p%a|&2} zBp9}A)468StO4KBw}z%#v9FsDs#rxww#%*C_fR=|ow{mpF+mY&DULdqM>tcRF6`*g zxqF_C1FZA4^HrKKM9)fC-d$=&n@8frxzlT-lwb}ZBUy|?*oG|<=CI}xlNgB-YG|RT zl{rT*Y=Ly^kat7YlXi6OqE^UP9@c%WPgxiDIddgZZ*m&k@3hK0l=dFMd95MR@HjKX zKApX5_xmu#RCMN2zTw-Cl6AjBC}ZZGJ17bWsixwY}M%#4uJSLMLFp!&xZ4Zur3fhq}c7 zqJJ>b@3h{kS!-c|ljO6~oUqloFegmw7 zyb$$yH|8aN`6DjeK1d7+Pfax34UdpNh%zm2C;kpv9e!|1g`JSEA)t|*WW6dQr+id&bz3pQ-7XMq$(7)A3YLg^zGud>m) z(UN3)Ap-Wu%Z8uxP=r&cLca@sIXOm}vQmMIpFED$#;)D-b(RuO;F1VTz|pW zr<%lR%Ab}q>NcTa^@j9E<2RtRSBH8PlTC{?Ehl*1mZk&AikZorLl;`XN9wVv5HvXI>#g0DyEGWjYUP=XQ6s$m7JQ8c)7Doo(YREt?#juwRg0 zC_I{CGy2d?9hJQ>Pv3$Zpmyx*j{Ov&JjTJ#V>oK5Iz#_fn+d3;yT4{bkyy7IF08uU zJd+~B;pXsWjqgSMg~I2lHerENN)sy?!lT}6t65WB6DwK5qcWp}S!OOo!bMaUV#8AGe&&LXelII>R<_sJ>0KRgmDbwLULjU3(X=2I zAi;Ug#rhi5E_VNxT}gN1X62)Hmp3=U=I*=Y6h4@bpQpKg1`JE-IL}7-?8j_i2zrk7 zC6H);Um}&O6J=aQR+rF$6#zOzbAQ_a3-+CDbnHt6s#Q5Rj)Di6gVs)fbS=KyB@!V< zJB#L6t(A69tH@5@{k+9Wobee7IOBHvJZP!*b7%q&CvP#msMu!IF6HxptT#WL@z;(# zpBjq9J>FMJ*<4>FMeBx@KmNR?dp2X!v^~2rS6+*N`_&J0`?*Ci&+gniyMI*soQoKw zd*wh;rTF>U^L<6t4I}F`w~06tvZCfXwa9E^h|;lrkrTz=Z6TqER3L26&H|D3k!Mi= zLT%to^PX_(h)>|<0|@VPOtxt&`1PmN`77YPD)l*6=DZ5-@jO2N*I(_d5;=~3s4ry_ zOAvXT9cYIoJwi3WyC)nY?t+I!LS=vh+Q%*2MC`FrSWV1#R{D|XlX)m3+%~_L*H|E*)rG`I~`zWpQd#* zP5AZeHj;y&F`?*Oa;rdE%@4u+3~}t#%*YQsCap4(ai%mvi2}Okb6xQ7+OI%$#G2W4 zl)55ZVSij!2Zji@snU4hObN(H6rC?#ilse>1Ib#s;Yu(W(I5+bV#!X?~%iZ?W;dwhN|Lb}Zk@v6b zNj&KRnEp{|A*--TPb?)$_wruiF~)lzQ;DoxV=}^iF0)dOn#}cfObVuUtgTo@LuKLW z{>e{vZ&8Ntx)saT(9gvQ%J3b!7Ov=p zuAL7l)!LNtuob4s=vD&v;0%yHVhzee8w7tl56Y$ZErtyO=m37=c=i)|3)tG`-#P%S z{dXWM-jSdCdt{xt>?A#NuFWhgaxZMRK_%w~-)iSqzLt={}Q z)^(;R3A6B_twwWClTuZ6?XaD$0OwP`M-2G+mG381P|o%5Aiel%Fn{SCqIIy?W`)8; z(zcy__+I_tZOfc!Gk5=EpqYq&d-0Q%cDKFLD-+v(@p4WgKt2v|8){dq?s;Gm$#sRL zwM#IMljfRgTmh91q(AR(cscO9EE|`6KjURMPgdP|HXX}F4(W}#gQ2{c8IXdA)@17| zd{bjrz^5&&p5(Y!q_Uq&{cxky??L9w+}GusIu?tUr8kzpzuiW7*whLjM(SCy!psju zOj5pWl|4NUn>$~O*ELUaoWTw%dO9Wm7g{7nE#(%Z+H|c40s!aUa{lgz)6eaGhqLf7 z1Ue9>P?6?V4}G!=oO<~oj-5W-9}5)8;NHyv(tX0i_C16gcCkNWCD8a@c=2uR?R8o$ z9>L=`b&ok*-zEa%IwS=74?>p=T!%ebxcNRRX06v#J5Q!lEFR;>&^7)>abNh>!1moh zX(KH0nA>**wSI(y@3_mmm0Of)O9>_g-w}*?NOk0zP(xyFXHJ`XoQ|j|GWAXUer~4q znl$25mR809kO+kfn9QuI%3W_S@0F|&G#+Frt+qK^i1DNUk9KK~e&syHgF^#7MBzd* zxpfGxyb8RYMt9BE?$$4%;uU)U)5}BuPwBT-P#<1@_HF|On3O_7knX?+0d+2edd(9j zFYBKM5xu%ZPkInr>Yr3u{0R6x@3LIr2HeOHbO*`$xck z#HneaPA6_4D~`I&l~nhmez=tt!Ct}^e33gP-X{J+*Z7ZIg08QbQj=2ZFKXp(&w!e6wOww+2RH}`Cb@IUQ+M7w4~Vxf6u#ALSF%t?c*oliD+*BItGxf+ z1J1!S10QB`a`Z<>u^N47(SH2coX~ppj~j`+`bgEIX(OqCoEr$~*~ZsP*ihn%aKbcU zxrwo2eIa?zP@DC;N%{9Qt6d*s79Tlj*T0!|)gzmamLY&*!F&15j{$$qMELy_CFjgB z?fRA8tm+fGsaN9#9LN7SIYTcw{UT&007X3hr*PXGX(Z^d^>nyIjkJc`1GQDf*pRYN zN<{?PNZ)r(n>qDY>@v=;`JuEfqX)$ZAHQ(*k7C3IBD%QGq<$|(qG=hB2gOM4H9nwB z4E-tk-fAuMtf(|zD`cs5dM(}N?y=)16DNpke7m_v-~B$l`zXhI_|(ytE4K!O=a!3O ztGu^pg(l@u(%WaX zS&K=~-{N%POSvNMY9g+}r=VEXUzg%r+e5(=N-$g$vI3l!G4xlZYsHm1OH`?a%qhZ; z`wzg`Wf-){8De>jkx&i&D@J@sS}}S-J9e0C8*nl8ooZpmWR-a-3q)6_d%b4`9az5* zqC|JtOXNLM27?eJQDi{HlS~cXS5Rw-WR859WRgSjBo_S$aEfr_bEVskyghxT=;6}I zRv4K=QT8y6%QV;tUrTlZO z8IHMlA3Ckt^1T*Pg=uqn?$tt{Kt?DeZ#rT4lr)>Wm-AjC0viyUH-!=&_LV@y&&b6I z(6(DGUtJ0Wz&X!|TsG68!yG$IQbk?ZDyBmj#&U# zD9*7!@#77Qz?H5Dg|2(&4Uf<8LzM1s=~%d&|9cmXfpLf9lzK;Q&JO}u!S#0m2LSvN zNj4OxQIPYhaIrF_{lxq@NGhR6&7x@7>aMOAfK2f=6c60p*L11o@2#Fs+eskW`<)8F zpJUKO#aUtiSG^DqudVF?>4-~Xk#j~h{nq`RW_scJaG->=7Ar_IS9}0GW;RpRyW8+d zEH!ho5Fj=a9#pOGPK)V+14sAj^QaqVs>jLjET?@y(JqEX^`fEc=YfOM+o)^csPkal zjiW$khN_BNbtl2WccALxC^9BRfzv8Rgix`-pASu>Va8~6JJ3RFr5xNIa;%o%hdSPY zEb8TBRc^2NGOjUw%iOG4p#XTU4z=_wR^=KMH4#tO=wRKnohQdZ8<{`C*oJi`0BR-i z1|ajx)^gg^e5sREAkPbcI%mINs<#jU_(I^CkD>s$?F4vHZGY{I=Jvt%?F&SL4PU%X z4RH77h7p%$2+(gy{1q@Mv=BHt-LLKf23?9CO6C(XC)lLL01BbpeI#w^OAG?NV!w6@ zDuJ@Njq=zp=k!V#fJp$CiPGpm?dL*#XK#k_V*SuVkd{d!g%$mD_GqSjYHSc-z<&-6 zRc%;r^|0?#%0^Mr%2|-^Fybkv~oD zrM&eRGCc&!&Tt6ZD>X{{%rsOaTpjUwYbT@t()M$fmaBmZa7oZQpmj11wmZ71wT=J5 z!u^;Y^({cYz}N2VriOl9XBT@EDs#IZ5s}QHtgckLn95n@j44&Cex(_q`GX*e%$A~6 zq0m(1ehEm67v+aX3LAl9__PaQvx$OgOx*K$T!QrikvH z6a;hlXrt6qAR#2{l4G+LS`QOcILQ3d?RXBjq`wWNhC0E>Xu7RqCb)UP0TF^CE<&<* z_O9b05}I!9Q9 z506i&3bBTbnAy~pM)mQ;0U@`da)=HT@gW7n-mD83HWg`)iirk308mvRqmUaef!b5x z{q5IDE>K#@M#w{GH|rzeVc@-IT53AWUrQz>N{zS$6+ZcSR^^P>S3jCEKI}ASVi4(# z-A;u9`wI`;yB#X6+-Mp=f241n>o2vNAKY4LuxBR{E$4z*{o~zt2&wNpkZJpGJkU`v zhj;?(qtgTjWY|xuh%4`58^DJI>?v~&IeI*%e(!Qt1KV#7t+=K4oo)T$y?20Xli?M0 z*#0EZP}FwrNtKX{?gD&%6GA)@~A z;=jf?7l?f~@-Hw408h`keqx$B*u!wP^j?+g7I<4MAd9Se!DAy=yC{u09`ks)qGrA0 zPp`l@dc}Lr{b}6)y8FYE_)kEr`aKYST8#JM!vV{QDO#yjJRqpg35CG1ciKAmgKl*FL-gQL~NI9q_sHpR?wFcse5=?JU07srBbCF1oYN zImXR-qSxqMktUuQHodHjqwn$|bM%Ktycbi{&u!$;4_j{sye(w89K<_>89f%}*!Xb{ z6fTS;cYTZ;5jyO#=RkglLfO4fX9z=Y;Dv;`iVHBI0KBj80cng!Y0Uyuw}yNS?lH;g zj$g2UPx`0u_V;DUt?bEAk|6E!^o>tzlL{(3o0}2c&a`a*F#cZr{P^?oR{av(_eAVF4&W^vr zWV*fm#-Bp9!oStN%{+CnoyD{z7i+p)6>g&Y$4Dv=B(D4ZqaFHE*A?F(AX1p7r<47t zbHui}X?Q1+s&J6WW2hK|_dK zz3$A%Ex)Ec#&r)-*C=L%(nZMGZF-jn@$o^Ts>2a@&QZ-Y;oCs&NAVyh9z$>hND!~V zpCgVP2NJ}Dud_k^o+ZRS1W=wsKb!`U{S_yx!{xyU97b!1;%jDZi6W0{;m=;DcLP`Oygt zvs2O*4Ibtg4>p=pyd1qsV1D1rodYrM(Ql@3L7)4~vdcMcUihN>=JeIZ?Lgg~CdEmz zW20i;Bw!uVmiiMR4s=0E*eF2YRbGU